Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Не удаётся выполнить ни Add-Migration, ни Update-Database

#entity_framework #migration


Добрый вечер. Суть проблемы в следующем: перестали применяться миграции в EF Code First. 

После внесения изменений пытаюсь выполнить Add-Migration , получаю сообщение:


  Unable to update database to match the current model because there are
  pending changes and automatic migration is disabled. Either write the
  pending model changes to a code-based migration or enable automatic
  migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to
  true to enable automatic migration.


Попытка выполнить Update-Database приводит к той же ошибке. 

По советам в интернете пыталась удалять папку с миграциями и таблицу _MigrationHistory,
делать Build Batch - ничего из этого не помогло.

Пробовала полностью удалить БД и выполнить Update-Database, с нуля БД создается,
но последующие изменения применить уже невозможно - та же ошибка в консоли.

Подскажите, пожалуйста, есть ли решение. Может, нужна какая-то дополнительная информация
- я предоставлю. Заранее спасибо.
    


Ответы

Ответ 1



Я только один случай знаю из практики, когда можно получить описанную вами ситуацию. Проверил на первом попавшемся проекте, где рабочая база и рабочие миграции. Вот как я ломал: создал в первой попавшейся таблице поле Title1 тут же сделал Add-Migration Asdf1 тут я должен был сделать Update-Database -- но я сделал вид, что я забыл применить миграцию через Update-Database, поэтому в этом шаге ничего не делаем сделал в этой же таблице ещё одно поле Title2 выполняю Add-Migration Asdf2 Вуаля: получаю ровно описанную вами ситуацию: PM> Add-Migration Asdf2 Unable to generate an explicit migration because the following explicit migrations are pending: [201705272231565_Asdf1]. Apply the pending explicit migrations before attempting to generate a new explicit migration. PM> Update-Database Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Applying explicit migrations: [201705272231565_Asdf1]. Applying explicit migration: 201705272231565_Asdf1. Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration. You can use the Add-Migration command to write the pending model changes to a code-based migration. PM> (Выделил полужирным ключевой момент, вольный перевод: не забудьте применить миграцию перед тем как пытаться создавать новую) Как чиню: комментирую поле Title2 жму Update-Database (применяется миграция Asdf1) раскомментирую поле Title2 выполняю Add-Migration Asdf2 выполняю Update-Database Всё работает! Проверьте, у вас возможно такая же ситуация. Меня смущает вот эта часть вопроса: "с нуля БД создается, но последующие изменения применить уже невозможно" -- выходит, вы несколько раз подряд забываете применить миграцию к базе перед созданием новой?

Ответ 2



Благодаря смекалке пользователя A K выяснилось, что выполнению команд мешал класс инициализатора БД и следующие строки: Database.SetInitializer(new DbInitializer()); Database.Initialize(true); Причина в том, что Entity Framework 6 не позволяет использовать инициализаторы (например, DropCreateDatabaseAlways) вместе с миграциями. Более подробно о проблеме: If this initializer is used to create the database then a single entry is added to the __MigrationsHistory table which then renders the database un-usable with migrations (since these initializers don't use your migrations to create the database). This has confused a large number of people in previous releases, so we opted to not automatically create database/schema when migrations is enabled. Источник: тык сюда It looks like EF 6.0 introduces a new rule: "If the DbContext is using an Initializer AND Migrations are configured, throw an exception when building the model". Источник: тык сюда Может, это поможет кому-нибудь, кто, как и я, попал в подобную ситуацию.

Комментариев нет:

Отправить комментарий