Недавно я изменил приложение с использования следующего для 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? Есть ли способ получить поведение, которое я ожидаю (т. е. только начальное значение, если есть изменение модели), или мне просто изменить свой начальный метод, чтобы он ожидал запуска при каждом запуске приложения?