Путаница с автоматической миграцией EF и заполнением — заполнение при каждом запуске программы

Недавно я изменил приложение с использования следующего для dev:

DropCreateDatabaseIfModelChanges<Context>


на использование:

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


В моем контексте БД у меня есть:

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

Я переопределил Seed(context) в DbMigrationsConfiguration, используя расширение AddOrUpdate, где я был просто используя «Добавить» перед заполнением в удаленной базе данных (DropCreateDatabaseIfModelChanges).

Меня смущает то, что Миграция запускается при каждом запуске приложения, независимо от каких-либо изменений в DbContext. Каждый раз, когда я запускаю приложение (библиотека запускается через службу), инициализатор запускается так же, как и Seed. Мое ожидаемое поведение - это проверка необходимости миграции (за кулисами проверьте, соответствует ли модель физической базе данных), затем обновите любые новые/удаленные таблицы/столбцы и запустите seed, только если что-то изменилось.

В моем тестировании начальное число запускается каждый раз, что работает, но, по-видимому, неэффективно, и это было не то, что я ожидал. К сожалению, документация MSDN весьма ограничена.

Я полностью неправильно использую MigrateDatabaseToLatestVersion? Есть ли способ получить поведение, которое я ожидаю (т. е. только начальное значение, если есть изменение модели), или мне просто изменить свой начальный метод, чтобы он ожидал запуска при каждом запуске приложения?

42
задан shox 21 May 2018 в 22:56
поделиться