Поделиться через


Использование migrate.exe

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

Примечание.

В этой статье предполагается, что вы знаете, как использовать code First Migrations в основных сценариях. Если вы этого не сделали, прежде чем продолжить, вам потребуется прочитать code First Migrations .

Копирование migrate.exe

При установке Entity Framework с помощью NuGet migrate.exe будет находиться в папке инструментов скачаемого пакета. В <папке> проекта\packages\EntityFramework.<version>\tools

После переноса.exe необходимо скопировать его в расположение сборки, содержащей миграции.

Если приложение предназначено для .NET 4, а не 4.5, необходимо скопировать файл Redirect.config в расположение, а также переименовать его migrate.exe.config. Это позволяет миграции.exe получать правильные перенаправления привязки, чтобы иметь возможность найти сборку Entity Framework.

.NET 4.5 .NET 4.0
.NET 4.5 Files .NET 4.0 Files

Примечание.

migrate.exe не поддерживает сборки x64.

После перемещения migration.exe в правильную папку вы сможете использовать ее для выполнения миграций в базу данных. Все служебные программы предназначены для выполнения миграций. Он не может создавать миграции или создавать скрипт SQL.

См. параметры

Migrate.exe /?

На приведенной выше странице справки, связанной с этой служебной программой, обратите внимание, что для работы этой программы потребуется использовать EntityFramework.dll в том же расположении, в котором выполняется миграция.exe.

Миграция на последнюю миграцию

Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"

При запуске migration.exe единственным обязательным параметром является сборка, которая является сборкой, которая содержит миграции, которые вы пытаетесь выполнить, но будет использовать все параметры на основе соглашений, если не указать файл конфигурации.

Миграция на определенную миграцию

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /targetMigration="AddTitle"

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

Указание рабочего каталога

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /startupDirectory="c:\\MyApp"

Если сборка имеет зависимости или считывает файлы относительно рабочего каталога, необходимо задать startupDirectory.

Указание конфигурации миграции для использования

Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"

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

Предоставление строка подключения

Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"

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

Распространенные проблемы

Сообщение об ошибке Решение
Необработанное исключение: System.IO.FileLoadException: не удалось загрузить файл или сборку EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 или одну из ее зависимостей. Определение манифеста размещенной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Обычно это означает, что вы запускаете приложение .NET 4 без файла redirect.config. Необходимо скопировать конфигурацию Redirect.config в то же расположение, что и migrate.exe, и переименовать его в файл migrate.exe.config.
Необработанное исключение: System.IO.FileLoadException: не удалось загрузить файл или сборку EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c5c561934e089" или одну из ее зависимостей. Определение манифеста размещенной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Это исключение означает, что вы запускаете приложение .NET 4.5 с конфигурацией Redirect.config, скопированной в расположение migrate.exe. Если приложение равно .NET 4.5, вам не нужно иметь файл конфигурации с перенаправлениями внутри. Удалите файл миграции.exe.config.
ОШИБКА. Не удается обновить базу данных в соответствии с текущей моделью, так как ожидающие изменения и автоматическая миграция отключена. Запись ожидающих изменений модели в миграцию на основе кода или включение автоматической миграции. Задайте для dbMigrationsConfiguration.AutomaticMigrationsEnabled значение true, чтобы включить автоматическую миграцию. Эта ошибка возникает при выполнении миграции, если вы не создали миграцию, чтобы справиться с изменениями, внесенными в модель, и база данных не соответствует модели. Добавление свойства в класс модели, а затем запуск migration.exe без создания миграции для обновления базы данных является примером этого.
ОШИБКА: тип не разрешен для члена "System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089". Эта ошибка может быть вызвана указанием неправильного каталога запуска. Это должно быть расположение миграции.exe
Необработанное исключение: System.NullReferenceException: ссылка на объект не задана для экземпляра объекта.
   в System.Data.Entity.Migrations.Console.Program.Main(String[] args)
Это может быть вызвано отсутствием обязательного параметра для используемого сценария. Например, указание строка подключения без указания имени поставщика.
ОШИБКА. В сборке ClassLibrary1 обнаружено несколько типов конфигурации миграции. Укажите имя используемого. При возникновении ошибки в данной сборке существует несколько классов конфигурации. Для указания используемого параметра /configurationType необходимо использовать параметр /configurationType.
ОШИБКА: не удалось загрузить файл или сборку< assemblyName> или одну из его зависимостей. Указанное имя сборки или база кода недействительна. (Исключение из HRESULT: 0x80131047) Это может быть вызвано неправильным указанием имени сборки или отсутствием
ОШИБКА: не удалось загрузить файл или сборку< assemblyName> или одну из его зависимостей. Была сделана попытка загрузить программу, имеющую неверный формат. Это происходит, если вы пытаетесь запустить migrate.exe для приложения x64. EF 5.0 и ниже будут работать только на x86.