Путаница в EF Auto Миграции и посев - посев при каждом запуске программы
Я недавно изменил приложение с использованием следующего для 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, где я только что использовал Add ранее с заполнением в db (DropCreateDatabaseIfModelChanges).
Я путаюсь с тем, что миграция запускается при каждом запуске приложения, независимо от того, есть ли какие-либо изменения в DbContext. Каждый раз, когда я запускаю приложение (библиотека запускается через службу), инициализатор работает так же, как и Seed. Мое ожидаемое поведение - это проверка необходимости миграции (за кулисами, чтобы проверить, соответствует ли модель физическим базам данных), затем обновить все новые / удаленные таблицы / столбцы и запускать seed, только если что-то изменилось.
В моем тестировании семя запускается каждый раз, что выполнимо, но, на первый взгляд, неэффективно и не соответствует ожиданиям. К сожалению, документация MSDN довольно ограничена.
Я полностью неправильно использую MigrateDatabaseToLatestVersion? Есть ли какой-нибудь способ получить ожидаемое поведение (то есть, только начальное, если есть изменение модели), или я должен просто изменить мой начальный метод, чтобы он запускался при каждом запуске приложения?