Подтвердить что ты не робот

Не удалось создать явную миграцию в инфраструктуре сущности

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

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

Например:

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

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

2. StartUp Project

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

enter image description here

Ответ 6

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

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

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

Ответ 7

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

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

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

Ответ 8

При запуске этой проблемы попробуйте добавить параметры в свой командлет add-migration. Например, указание начального проекта, а также имя строки подключения может помочь 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.

Ответ 9

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

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

После этого вы можете снова запустить "Добавить-миграцию..."

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

Ответ 10

Только мои два цента:

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

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

Решение:

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

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

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

Ответ 11

Есть неясность и так ошибка. Лучший способ - исключить текущий файл миграции и создать новый файл миграции (add -igration), а затем скопировать содержимое новой миграции в исключенный файл, включить его снова и запустить команду update-database.

Ответ 12

У меня были те же проблемы, и я смог разрешить его запуск Add-Migration 'MigrationName' -Force

С -Force является важной частью.

Ответ 13

В моей локальной базе данных не было заселенного или существующего __MigrationHistory. Я вручную создал таблицу, а затем перенес данные из этой таблицы из PROD в мою локальную базу данных. Это заставило В.С. считать, что миграция была применена (что они были).

Ответ 14

я решил ту же проблему, как это:

  • удалить старый файл миграции
  • Обновление базы данных -force
  • Add-Migration AddedEntity
  • обновление базы данных

Ответ 15

Сценарий

  • Я работаю в ветке, в которой я создал новую миграцию БД.
  • Я готов обновить от мастера, но у мастера также есть недавняя миграция БД.
  • Я удаляю миграцию ветки db для предотвращения конфликтов.
  • "Обновление от мастера".

Проблема

После обновления от мастера я запускаю "Добавить-Миграция my_migration_name", но получаю следующую ошибку:

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

Итак, я запустил "Update-Database" и получил следующую ошибку:

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

Решение

На этом этапе повторное выполнение "Add-Migration my_migration_name" решило мою проблему. Моя теория заключается в том, что запуск "базы данных обновлений" получил все в состоянии, которое необходимо для того, чтобы "Add-Migration" работала.

Ответ 16

Я также столкнулся с этой проблемой. Это произошло, когда я создал новую БД, и у меня были ожидающие изменения для моей первоначальной миграции кода, тогда я попытался запустить команду "Обновить базу данных". Выполните команду "Добавить-миграция -MigrationName", чтобы создать новую миграцию для новой базы данных. Затем запустите команду "Обновить базу данных".

Ответ 17

У меня тоже была эта проблема для базы данных, которая, как я знал, была актуальной при запуске Add-Migration. Решено, просто выполнив команду Add-Migration второй раз. Подозревайте в проблеме подключения, как это было предложено Робин Дорбелл выше.

Ответ 18

Это произошло, когда я внезапно переименовал класс старой миграции, который уже существует в db. Я проверил историю VCS, определил это и переименовал обратно. После этого все работало.

Ответ 19

Совет: Всегда полезно использовать переключатель -Script для команд миграции, если вы не уверены. Это также действительно помогает понять, что на самом деле делает Update-Database.

Я запускаю следующее для обновления базы данных, затем получаю скрипт, который можно применить вручную (или просто запустить его снова без тега -Script).

Для Update-Database я бы запустил следующее:

Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive

Где SQL_AzureLive - именованная строка подключения в моей конфигурации.

Тогда я могу убедиться, что SQL выглядит правильно, применить его и все готово. Как и многие другие, если строка подключения неверна или недействительна, вы получите эту ошибку.

Ответ 20

Я сделал по-другому. Я полностью удалил базу данных и снова запустил update-database

Ответ 21

У меня была более простая проблема. VS ошибочно сообщил об этой ошибке, когда у меня было VPN-подключение к клиентскому сайту, подключенному к моей рабочей станции. Проблема заключалась в том, что безопасность СУБД была настроена на прием запросов только от моего реального локального IP. Простое отключение VPN решило проблему.

Ответ 22

В моем случае (с использованием MS Visual Studio) это было так же просто, как перезапустить Visual Studio.

Ответ 23

Я перенес точно такую ​​же проблему сразу после возвращения из перехода на другой.

В моем случае я "targetmigration" от "migration06" до "migration04".

Мне нужно было удалить "migration0" 6, а затем я смог заставить создать "migration05". Это в основном означает, что вам нужно просто сохранить следующую миграцию после целевого.