Sto provando a generare automaticamente il mio database se non esiste ed eseguire il metodo Seed()
per popolare i dati. Nel mio costruttore contesto di database ho questo:MigrateDatabaseToLatestVersion senza metodo Seed()
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext, Configuration>());
Questa grande opera, il mio database viene creato automaticamente con tutte le tabelle come voglio, ma sembra che il metodo Seed()
non viene chiamato, il mio database è vuoto. Questa è la mia classe:
internal sealed class Configuration : DbMigrationsConfiguration<Context.MyDBContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(Context.MyDBContext context)
{
context.Users.AddOrUpdate(
new Entities.User() { Email = "[email protected]", Password = "", Language = "en", CreatedDate = DateTime.Now }
);
base.Seed(context);
}
}
Quando eseguo Update-Database
nella console Nuget
il dati viene popolata dopo la creazione del database, ma con il metodo MigrateDatabaseToLatestVersion
Seed()
non viene chiamato.
Cosa può succedere? Ho provato a fare funzionare manualmente migrazioni come preso da here:
var configuration = new MyDbContextConfiguration();
configuration.TargetDatabase = new DbConnectionInfo(
database.ConnectionString, database.ProviderName);
var migrator = new DbMigrator(configuration);
migrator.Update();
Ma anche non funziona.
EDIT:
Ok, dopo un po 'di più test ho trovato che la Seed()
corre metodo, ma solo quando il database esiste già, cioè, al primo periodo, quando viene creato il database per il la prima volta il metodo Seed()
non viene eseguito, ma quando eseguo la mia app la seconda volta viene eseguito Seed()
get. Ho anche dovuto aggiungere context.SaveChanges()
in modo per farlo funzionare (grazie a @DavidG nei commenti):
protected override void Seed(Context.MyDBContext context)
{
context.Users.AddOrUpdate(
new Entities.User() { Email = "[email protected]", Password = "", Language = "en", CreatedDate = DateTime.Now }
);
context.SaveChanges();
base.Seed(context);
}
Così forse posso chiamare manualmente Seed()
all'interno Configuration()
e fare un po 'il controllo per evitare di aggiungere i dati duplicazione o la modifica dei dati quello esiste già.
non funziona non è sufficiente. Hai provato ad entrare in un debugger? Viene chiamato il metodo Seed? Se lo è, il problema potrebbe essere tentare di inizializzare un utente in questo modo. Usa UserManager invece –
Puoi lanciare un'eccezione nel metodo 'Seed' per verificare che il metodo seed non sia stato eseguito affatto (e non che semplicemente l'utente non sia stato inserito nel database?). – Rob
Non si sta chiamando 'context.SaveChanges();' dopo aver aggiunto gli utenti. – DavidG