Zamieszanie nad EF Auto Migrations i seeding - rozsiewanie każdego programu

Ostatnio zmieniłem aplikację na następującą dla dev:

DropCreateDatabaseIfModelChanges<Context>


Aby użyć:

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


W moim kontekście bazy danych mam:

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>());
}

Zastąpiłem Seed (kontekst) w DbMigrationsConfiguration przy użyciu rozszerzenia AddOrUpdate, gdzie właśnie użyłem Add before z rozsiewaniem na drop db (DropCreateDatabaseIfModelChanges).

Moje zamieszanie polega na tym, że Migracja jest uruchamiana przy każdym uruchomieniu aplikacji, niezależnie od jakichkolwiek zmian w DbContext. Za każdym razem, gdy uruchamiam aplikację (biblioteka uruchamiana przez usługę), inicjator uruchamia się tak samo, jak Seed. Moim oczekiwanym zachowaniem jest sprawdzenie, czy migracja jest konieczna (za kulisami sprawdź, czy model pasuje do fizycznej db), a następnie zaktualizuj nowe / usunięte tabele / kolumny i uruchamiaj seedowanie tylko wtedy, gdy coś się zmieniło.

W moim testowaniu nasiona działają za każdym razem, co jest wykonalne, ale wydaje się nieefektywne i nie było tym, czego oczekiwałem. Niestety dokumentacja MSDN jest dość ograniczona.

Czy całkowicie nadużywam MigrateDatabaseToLatestVersion? Czy jest jakiś sposób, aby uzyskać zachowanie, którego się spodziewam (tj. Tylko seedować, jeśli istnieje zmiana modelu), czy też powinienem zmienić moją metodę seed, aby oczekiwać uruchomienia każdej aplikacji?

questionAnswers(3)

yourAnswerToTheQuestion