MigrateDatabaseToLatestVersion keine laufende Seed () -Methode
Ich versuche, meine Datenbank automatisch zu generieren, wenn sie nicht existiert, und führe das @ auSeed()
-Methode zum Auffüllen der Daten. In meinem Datenbank-Kontextkonstruktor habe ich Folgendes:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext, Configuration>());
Das funktioniert großartig, meine Datenbank wird automatisch mit allen gewünschten Tabellen erstellt, aber es scheint, als ob dasSeed()
Methode wird nicht aufgerufen, meine Datenbank ist leer. Das ist meine Klasse:
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);
}
}
Wenn ich renneUpdate-Database
in demNuget
console Die Daten werden nach der Datenbankerstellung ausgefüllt, aber mitMigrateDatabaseToLatestVersion
dasSeed()
Methode wird nicht aufgerufen.
Was kann passieren? Ich habe versucht, Migrationen manuell auszuführen, wie in @ beschriebeHie:
var configuration = new MyDbContextConfiguration();
configuration.TargetDatabase = new DbConnectionInfo(
database.ConnectionString, database.ProviderName);
var migrator = new DbMigrator(configuration);
migrator.Update();
Aber funktioniert auch nicht.
BEARBEITEN
Ok, nach einigen weiteren Tests stellte ich fest, dass dasSeed()
ie @ -Methode wird ausgeführt, jedoch nur, wenn die Datenbank bereits vorhanden ist. Dies gilt beim ersten Ausführen, wenn die Datenbank zum ersten Mal erstellt wirSeed()
-Methode wird nicht ausgeführt, aber wenn ich meine App zum zweiten Mal starteSeed()
wird ausgeführt. Ich musste auch @ hinzufügcontext.SaveChanges()
damit es funktioniert (danke an @DavidG in den Kommentaren):
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);
}
So kann ich vielleicht manuell @ anrufSeed()
InnerhalbConfiguration()
und führen Sie einige Überprüfungen durch, um zu vermeiden, dass doppelte Daten hinzugefügt oder bereits vorhandene Daten geändert werden.