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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage