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