Невозможно сгенерировать явную миграцию в структуре объекта - PullRequest
84 голосов
/ 22 марта 2012

Я добавляю новую миграцию, но это сообщение показывает:

Невозможно сгенерировать явную миграцию, поскольку ожидаются следующие явные миграции: [201203170856167_left].Примените отложенные явные миграции, прежде чем пытаться создать новую явную миграцию.

Может ли кто-нибудь мне помочь?

Ответы [ 24 ]

74 голосов
/ 22 марта 2012

Сообщает, что в вашем приложении имеется некоторая необработанная миграция, и для запуска другой миграции требуется запустить Update-Database.

40 голосов
/ 31 июля 2015

У меня была такая же проблема.Очевидно, сущностная структура генерирует эту ошибку, когда она не может подключиться к базе данных.Поэтому убедитесь, что вы можете получить к нему доступ, прежде чем искать другие проблемы.

30 голосов
/ 07 февраля 2014

Вам либо нужно запустить «update-database» из консоли диспетчера пакетов, чтобы отправить изменения в базу данных, либо вы можете удалить ожидающий файл миграции ([201203170856167_left]) из папки Migrations, а затем повторно запустить add-миграция ", чтобы создать новую миграцию, основанную на ваших изменениях.

24 голосов
/ 11 октября 2015

Эта ошибка также может означать, что миграции больше не распознаются.Это случилось со мной после изменения значения ContextKey в Migrations.Configuration.Решением было просто обновить ContextKey в таблице базы данных «__MigrationHistory» (или, я полагаю, вернуть значение в классе Configuration).ContextKey и пространство имен в вашем приложении должны совпадать.

13 голосов
/ 21 июня 2016

1. Строка подключения / Разрешения на подключение

Проверьте строку подключения еще раз.

Убедитесь, что пользователь, к которому вы подключаетесь , все еще имеет разрешение на чтение из [__MigrationHistory] и имеет разрешение на редактирование схемы.

Вы также можете попытаться изменить строку подключения в файле конфигурации приложения или веб-приложения, чтобы использовать Integrated Security (Windows Auth) для запуска команды add -igration как . .

Например:

connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;" 

Эта строка подключения будет помещена в файл App.config проекта, в котором находится DbContext.

2. Проект запуска

Вы можете указать проект StartUp в командной строке или щелкнуть правой кнопкой мыши проект с папкой DbContext, Configuration и папками Migrations и выбрать Установить как проект StartUp . Я серьезно, это действительно может помочь.

enter image description here

8 голосов
/ 29 сентября 2016

Имел ту же проблему и смог решить с некоторыми подсказками из приведенных выше ответов:

  • В консоли диспетчера пакетов проверьте проект по умолчанию (укажите проект с конфигурацией миграции
  • Убедитесь, что у startup-proj есть web.config с допустимой строкой соединения (или
  • Убедитесь, что у проекта с миграциями есть app.config / web.config с допустимой строкой соединения
  • Проверьте разрешения вБД (для пользователя, настроенного в вашей строке подключения)

Используйте «update-database -verbose» в консоли диспетчера пакетов, чтобы получить более конкретную информацию о том, к чему пытается подключиться миграция. (В моем случае это помоглоузнать, что мой запуск Proj не был установлен правильно ...)

6 голосов
/ 01 мая 2014

Если вы не использовали Update-Database, вы можете просто удалить его.Если вы запустили обновление, затем откатите его, используя Update-Database -TargetMigration "NameOfPreviousMigration", затем удалите его.

Ссылка: http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/

Я скопировал этот текст прямо отсюда: Как сделатьЛи отменить последнюю команду Add-Migration?

6 голосов
/ 05 мая 2016

При возникновении этой проблемы попробуйте добавить параметры в командлет add -igration.Например, указание запускаемого проекта и имени строки подключения может помочь EF найти вашу целевую базу данных.

add-migration Delta_Defect_0973 -ConfigurationTypeName your.namespace.ContextClassName -StartUpProject DeltaProject -ConnectionStringName DeltaSQL

Где:

Delta_Defect_0973 - это имявашей миграции

your.namespace.ContextClassName - это имя вашего класса конфигурации в папке миграции с префиксом полного пространства имен.

DeltaProject - это имя вашего основного проекта с файлом web.config или app.config.

DeltaSQL - это имя строки подключения, определенной в вашем web.config или app.config.файл.

5 голосов
/ 07 сентября 2016

Эта ошибка означает, что необходимо выполнить отложенные миграции, прежде чем вы сможете выполнить другую явную миграцию. Вы можете выбрать

  1. Выполнить отложенные миграции с помощью команды Update-Database
  2. Удалить ожидающие миграции. Самый безопасный способ - открыть папку Migrations, щелкнув правой кнопкой мыши [201203170856167_left]> Исключить из проекта

После этого вы можете снова запустить "Add-Migration ..."

Надеюсь, это поможет

3 голосов
/ 17 ноября 2016

Просто мои два цента:

Мой сценарий:

  1. Я восстановил свою локальную базу данных в рабочее состояние.
  2. Уже применены миграции к ней.
  3. Всякий раз, когда я пытался добавить новую миграцию, я получал ошибку об ожидающих миграциях, как упоминалось в моем операторе.

Решение:

Чтобы обойти это, я просто предоставил более явные параметры:

Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose

Я склонен считать, что вы можете установить параметр в папке app.config, чтобы позволить вам по умолчанию это поведение таквам не нужно указывать явные параметры каждый раз.Однако я не уверен, как это сделать.

...