Ответ 1
Он сообщает вам, что в вашем приложении есть некоторая необработанная миграция, и для этого требуется запустить Update-Database
, прежде чем вы сможете добавить другую миграцию.
Я добавляю новую миграцию, но это сообщение показывает:
Невозможно создать явный переход, поскольку следующее явные миграции ожидаются: [201203170856167_left]. Примените ожидая явных миграций, прежде чем пытаться создать новую явная миграция.
Может ли кто-нибудь мне помочь?
Он сообщает вам, что в вашем приложении есть некоторая необработанная миграция, и для этого требуется запустить Update-Database
, прежде чем вы сможете добавить другую миграцию.
У меня была та же проблема. По-видимому, структура сущности генерирует эту ошибку, когда она не может подключиться к базе данных. Поэтому убедитесь, что вы можете получить к нему доступ, прежде чем искать другие проблемы.
Вам либо нужно запустить "update-database" из консоли менеджера пакетов, чтобы вносить изменения в базу данных, либо вы можете удалить ожидающий файл миграции ([201203170856167_left]) из папки Migrations, а затем повторно запустить "add- миграция", чтобы создать новую миграцию, основанную на ваших изменениях.
Эта ошибка также может означать, что миграции больше не распознаются. Это случилось со мной после изменения значения ContextKey в Migrations.Configuration. Решением было просто обновить ContextKey в таблице базы данных "__MigrationHistory" (или, я полагаю, вернуть значение в классе Configuration). ContextKey и пространство имен в вашем приложении должны совпадать.
Проверьте строку подключения еще раз.
Убедитесь, что пользователь, с которым вы соединяетесь, все еще имеет разрешение на чтение из [__MigrationHistory]
и имеет разрешение на редактирование схемы.
Вы также можете попробовать изменить строку подключения в файле конфигурации приложения или веб-приложения, чтобы использовать встроенную безопасность (проверку подлинности Windows) для запуска команды add -igration от имени пользователя.
Например:
connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;"
Эта строка подключения будет помещена в файл App.config проекта, в котором находится DbContext.
Вы можете указать проект StartUp в командной строке или щелкнуть правой кнопкой мыши проект в DbContext
, Configuration
and Migrations и выбрать Set as StartUp project. Я серьезно, это действительно может помочь.
Имел ту же самую проблему и смог решить некоторые подсказки из приведенных выше ответов:
Используйте "update-database -verbose" в консоли диспетчера пакетов, чтобы получить более конкретную информацию, с которой миграция пытается подключиться. (Помог в моем случае, чтобы узнать, что мой запуск proj установлен неправильно...)
Если вы не использовали Update-Database
, вы можете просто удалить его. Если вы запустили обновление, верните его с помощью Update-Database -TargetMigration "NameOfPreviousMigration"
, а затем удалите его.
Ссылка: http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/
Я скопировал этот текст прямо здесь: Как мне отменить последнюю команду Add-Migration?
При запуске этой проблемы попробуйте добавить параметры в свой командлет 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.
Эта ошибка означает, что ожидающие миграции необходимо выполнить, прежде чем вы сможете выполнить другую явную миграцию. Вы можете выбрать
После этого вы можете снова запустить "Добавить-миграцию..."
Надеюсь, что это поможет
Только мои два цента:
Мой сценарий:
Решение:
Чтобы обойти это, я просто предоставил более явные параметры:
Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose
Мне повезло, что вы можете установить настройку в своей папке app.config, чтобы вы могли по умолчанию выполнять это поведение, поэтому вам не нужно предоставлять явные параметры каждый раз. Однако я не уверен, как это сделать.
Есть неясность и так ошибка. Лучший способ - исключить текущий файл миграции и создать новый файл миграции (add -igration), а затем скопировать содержимое новой миграции в исключенный файл, включить его снова и запустить команду update-database.
У меня были те же проблемы, и я смог разрешить его запуск Add-Migration 'MigrationName' -Force
С -Force является важной частью.
В моей локальной базе данных не было заселенного или существующего __MigrationHistory
. Я вручную создал таблицу, а затем перенес данные из этой таблицы из PROD в мою локальную базу данных. Это заставило В.С. считать, что миграция была применена (что они были).
я решил ту же проблему, как это:
Сценарий
Проблема
После обновления от мастера я запускаю "Добавить-Миграция my_migration_name", но получаю следующую ошибку:
Невозможно создать явный переход, поскольку следующее явные миграции ждут: [201607181944091_AddExternalEmailActivity]. Применение ожидающего явного миграции, прежде чем пытаться генерировать новую явную миграцию.
Итак, я запустил "Update-Database" и получил следующую ошибку:
Невозможно обновить базу данных в соответствии с текущей моделью, поскольку есть ожидающие изменения и автоматическая миграция отключены.
Решение
На этом этапе повторное выполнение "Add-Migration my_migration_name" решило мою проблему. Моя теория заключается в том, что запуск "базы данных обновлений" получил все в состоянии, которое необходимо для того, чтобы "Add-Migration" работала.
Я также столкнулся с этой проблемой. Это произошло, когда я создал новую БД, и у меня были ожидающие изменения для моей первоначальной миграции кода, тогда я попытался запустить команду "Обновить базу данных". Выполните команду "Добавить-миграция -MigrationName", чтобы создать новую миграцию для новой базы данных. Затем запустите команду "Обновить базу данных".
У меня тоже была эта проблема для базы данных, которая, как я знал, была актуальной при запуске Add-Migration. Решено, просто выполнив команду Add-Migration второй раз. Подозревайте в проблеме подключения, как это было предложено Робин Дорбелл выше.
Это произошло, когда я внезапно переименовал класс старой миграции, который уже существует в db. Я проверил историю VCS, определил это и переименовал обратно. После этого все работало.
Совет: Всегда полезно использовать переключатель -Script
для команд миграции, если вы не уверены. Это также действительно помогает понять, что на самом деле делает Update-Database
.
Я запускаю следующее для обновления базы данных, затем получаю скрипт, который можно применить вручную (или просто запустить его снова без тега -Script).
Для Update-Database
я бы запустил следующее:
Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive
Где SQL_AzureLive
- именованная строка подключения в моей конфигурации.
Тогда я могу убедиться, что SQL выглядит правильно, применить его и все готово. Как и многие другие, если строка подключения неверна или недействительна, вы получите эту ошибку.
Я сделал по-другому. Я полностью удалил базу данных и снова запустил update-database
У меня была более простая проблема. VS ошибочно сообщил об этой ошибке, когда у меня было VPN-подключение к клиентскому сайту, подключенному к моей рабочей станции. Проблема заключалась в том, что безопасность СУБД была настроена на прием запросов только от моего реального локального IP. Простое отключение VPN решило проблему.
В моем случае (с использованием MS Visual Studio) это было так же просто, как перезапустить Visual Studio.
Я перенес точно такую же проблему сразу после возвращения из перехода на другой.
В моем случае я "targetmigration" от "migration06" до "migration04".
Мне нужно было удалить "migration0" 6, а затем я смог заставить создать "migration05". Это в основном означает, что вам нужно просто сохранить следующую миграцию после целевого.