В моем ASP.NET MVC Web App, поддерживаемом EF Code. Сначала, используя EF Migrations, мне нужно лучше контролировать обновления БД, делая их полуавтоматическими. Цель состоит в том, чтобы запустить их только из кода (например, запустив DbMigrator.Update()
), но если он не запущен, приложение все равно должно выполняться, игнорируя возможные изменения.
Для этого я устанавливаю DbMigrationsConfiguration.AutomaticMigrationsEnabled
на false
, но при первом доступе к базе данных я получаю следующее исключение:
System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException : 'Невозможно обновить базу данных в соответствии с текущей моделью, поскольку имеются ожидающие изменения и автоматическая миграция отключена. Либо запишите ожидающие изменения модели в миграцию на основе кода, либо включите автоматическую миграцию. Установите для DbMigrationsConfiguration.AutomaticMigrationsEnabled значение true, чтобы включить автоматическую миграцию. '
Хорошая часть: я смог опустить исключение, установив disableDatabaseInitialization="true"
в Web.config
как , описанное в MSDN (я не нашел другого способа работы).
Я запускаю следующий код в пользовательском триггере:
var config = new DbMigrationsConfiguration<MyContext>
{
AutomaticMigrationsEnabled = false,
AutomaticMigrationDataLossAllowed = false,
MigrationsAssembly = Assembly.GetAssembly(typeof(InitialCreate)),
MigrationsNamespace = typeof(InitialCreate).Namespace
};
var migrator = new DbMigrator(config);
migrator.Update(); // throws Exception
Вызывает обновление вызова:
System.Data.SqlClient.SqlException : 'В базе данных уже есть объект с именем' MyEntity '.'
Это может быть связано с использованием disableDatabaseInitialization
. Кроме того, вызов migrator.GetLocalMigrations()
перечисляет все Миграции, но migrator.GetDatabaseMigrations()
не перечисляет ни одного (пусто), в то время как уже применены некоторые Миграции.
Можете ли вы определить ошибку?