Недавно я изменил приложение с помощью следующего для dev:
DropCreateDatabaseIfModelChanges<Context>
Для использования:
public class MyDbMigrationsConfiguration: DbMigrationsConfiguration<GrsEntities>
{
public MyDbMigrationsConfiguration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
}
В моем контексте db у меня есть:
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 (контекст) в DbMigrationsConfiguration, используя расширение AddOrUpdate, где я просто использовал Add before с посевом в drop db (DropCreateDatabaseIfModelChanges).
Мое недоразумение состоит в том, что Migration запускается с каждым запуском приложения независимо от каких-либо изменений в DbContext. Каждый раз, когда я запускаю приложение (библиотека запускается через службу), инициализатор работает так же, как и Seed. Мое ожидаемое поведение - это проверка необходимости миграции (за кадром проверяет, соответствует ли модель физическому db), затем обновлять любые новые/удаленные таблицы/столбцы и запускать только семя, если что-то изменилось.
В моем тестировании семена запускаются каждый раз, что является работоспособным, но, по-видимому, неэффективным и не то, что я ожидал. К сожалению, документация MSDN довольно ограничена.
Я полностью злоупотребляю MigrateDatabaseToLatestVersion? Есть ли способ получить ожидаемое поведение (т.е. Только семя, если есть изменение модели), или я должен просто изменить метод семени, чтобы ожидать запуска каждого запуска приложения?