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