Ich versuche, meine Datenbank automatisch zu generieren, wenn sie nicht existiert, und die Seed()
-Methode zum Auffüllen der Daten auszuführen. In meiner Datenbank Context Konstruktor habe ich dies:MigrateDatabaseToLatestVersion keine laufende Seed() -Methode
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext, Configuration>());
Dieses große Werk, meine Datenbank automatisch mit allen Tabellen erstellt, wie ich will, aber es scheint, wie die Seed()
Methode nicht aufgerufen wird, meine Datenbank leer ist. 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);
}
}
Als ich Update-Database
in der Nuget
Konsole laufen die Daten nach der Erstellung der Datenbank gefüllt wird, aber mit MigrateDatabaseToLatestVersion
die Seed()
Methode wird nicht aufgerufen.
Was kann passieren? Ich habe versucht, Migration manuell ausgeführt wird, wie aus here genommen:
var configuration = new MyDbContextConfiguration();
configuration.TargetDatabase = new DbConnectionInfo(
database.ConnectionString, database.ProviderName);
var migrator = new DbMigrator(configuration);
migrator.Update();
aber auch nicht funktioniert.
EDIT:
Ok, nach einiger mehr Tests fand ich, dass die Seed()
Verfahren läuft, aber nur, wenn die Datenbank bereits vorhanden ist, das heißt, auf dem ersten Lauf, wenn die Datenbank für die erstellt wird, Zum ersten Mal die Seed()
Methode wird nicht ausgeführt, aber wenn ich meine App zum zweiten Mal Seed()
ausführen ausgeführt. Ich hatte auch context.SaveChanges()
hinzuzufügen, um für sie (dank @DavidG in den Kommentaren) zu arbeiten:
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);
}
Vielleicht kann ich manuell Seed()
innerhalb Configuration()
rufen und tun einige Prüfung duplizieren Daten zu vermeiden das Hinzufügen oder Ändern von Daten das existiert schon.
Funktioniert nicht nicht genug. Haben Sie versucht, mit einem Debugger zu arbeiten? Wird die Seed-Methode aufgerufen? Wenn dies der Fall ist, versucht das Problem möglicherweise, einen Benutzer auf diese Weise zu initialisieren. Benutze stattdessen UserManager –
Kannst du eine Exception in die 'Seed'-Methode werfen, um zu überprüfen, ob die Seed-Methode überhaupt nicht ausgeführt wurde (und nicht einfach, dass der Benutzer nicht in die Datenbank eingefügt wurde?). – Rob
Sie rufen nicht 'context.SaveChanges();' auf, nachdem Sie Ihre Benutzer hinzugefügt haben. – DavidG