Verwirrung über EF Auto Migrations und Seeding - Seeding bei jedem Programmstart

Ich habe kürzlich eine Anwendung von der Verwendung der folgenden für dev geändert:

DropCreateDatabaseIfModelChanges<Context>


Zu verwenden:

public class MyDbMigrationsConfiguration: DbMigrationsConfiguration<GrsEntities>
{
    public MyDbMigrationsConfiguration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
}


In meinem Datenbankkontext habe ich:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // Tell Code First to ignore PluralizingTableName convention
    // If you keep this convention then the generated tables will have pluralized names.
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

    //set the initializer to migration
    Database.SetInitializer(new MigrateDatabaseToLatestVersion<GrsEntities, MigrationConfig>());
}

Ich habe Seed (Kontext) in DbMigrationsConfiguration mit der Erweiterung AddOrUpdate überschrieben, wobei ich Add zuvor mit dem Seeding für die Drop-Datenbank (DropCreateDatabaseIfModelChanges) verwendet habe.

Ich bin verwirrt, dass die Migration bei jedem Start der Anwendung ausgeführt wird, unabhängig davon, ob Änderungen am DbContext vorgenommen wurden. Jedes Mal, wenn ich die Anwendung starte (Bibliothek wird über einen Dienst ausgeführt), wird der Initialisierer wie der Seed ausgeführt. Mein erwartetes Verhalten ist eine Überprüfung, ob eine Migration erforderlich ist (hinter den Kulissen wird überprüft, ob das Modell mit der physischen Datenbank übereinstimmt). Aktualisieren Sie dann alle neuen / entfernten Tabellen / Spalten und führen Sie den Startwert nur aus, wenn sich etwas geändert hat.

In meinen Tests läuft jedes Mal Saatgut, das funktioniert, aber scheinbar ineffizient ist und nicht das war, was ich erwartet hatte. Leider ist die MSDN-Dokumentation sehr begrenzt.

Missbrauche ich MigrateDatabaseToLatestVersion vollständig? Gibt es eine Möglichkeit, das von mir erwartete Verhalten zu erzielen (d. H. Nur Startwert, wenn sich das Modell ändert), oder sollte ich einfach meine Startwertmethode ändern, um zu erwarten, dass sie bei jedem Anwendungsstart ausgeführt wird?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage