Ответ 1
Когда вы выполняете команду enable-migrations, вам будет представлена папка /Миграции, в которой вы можете найти файл с именем Configuration.cs, Внутри конструктора этого файла по умолчанию установлено значение свойства:
AutomaticMigrationsEnabled = false;
Это гарантирует, что ваша база данных не будет переноситься автоматически, а, скорее, путем обращения к каждой миграции вручную.
Однако, если ваша база данных больше, чем ваши модели домена, т.е. вы просто работаете с частью уже существующей базы данных, то где-то в вашем приложении запускается (если это приложение ASP.NET, Application_Start обработчик событий), вам нужно добавить следующий код:
Database.SetInitializer<YourDbContext>(null);
В противном случае Entity Framework будет жаловаться на несоответствие между определением базы данных в вашей модели домена и фактическим текущим состоянием базы данных.
EDIT:
Если вы хотите быть уверены, что YourDbContext не пытается изменить базу данных, сделайте следующее:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new YourCustomException("Code first changes are not allowed.");
}
ИЗМЕНИТЬ еще раз:
Я пытаюсь понять, какой сценарий вы пытаетесь выполнить. Если у вас есть существующая база данных и вы хотите ее обновить, но только вручную, это подход:
- Используйте шаблон генератора DbContext для генерации DbContext и объектов из существующей базы данных.
- Запуск разрешения-миграции
- Сделать add-migration Initial
- Шаг 3 должен генерировать пустую миграцию, если все было сделано должным образом. Вы можете удалить его.
- Теперь, когда вы делаете какие-то изменения, вам нужно сделать add-migration Сменить имя. Это не будет работать в базе данных, если вы не выполните обновление-базы данных.