Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Для обновления базы данных из Visual Studio можно использовать миграцию кода, но также можно выполнить с помощью средства командной строки migrate.exe. На этой странице представлен краткий обзор использования migrate.exe для выполнения миграций в базу данных.
Замечание
В этой статье предполагается, что вы умеете использовать Code First Migrations в основных сценариях. Если вы этого не сделали, прежде чем продолжить, вам потребуется прочитать code First Migrations .
Скопируйте migrate.exe
При установке Entity Framework с помощью NuGet migrate.exe будет находиться в папке инструментов скачаемого пакета. В папке проекта <\packages\EntityFramework.<version>\tools
Как только у вас появится migrate.exe, вы должны скопировать его в расположение сборки, содержащей ваши миграции.
Если ваше приложение предназначено для .NET 4, а не для 4.5, то вам необходимо также скопировать Redirect.config в то же расположение и переименовать его в migrate.exe.config. Это необходимо для того, чтобы migrate.exe получал правильные перенаправления привязок и мог найти сборку Entity Framework.
| .NET 4.5 | .NET 4.0 |
|---|---|
|
|
Замечание
migrate.exe не поддерживает сборки x64.
После перемещения migrate.exe в правильную папку вы сможете использовать ее для выполнения миграций в базу данных. Все служебные программы предназначены для выполнения миграций. Он не может создавать миграции или создавать скрипт SQL.
Просмотреть параметры
Migrate.exe /?
Чтобы отобразить страницу справки, связанную с этой служебной программой, убедитесь, что файл EntityFramework.dll находится в той же папке, где вы запускаете migrate.exe, иначе это не будет работать.
Переход на последнюю версию миграции
Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"
При запуске migrate.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, вам не нужно иметь файл конфигурации с перенаправлениями внутри. Удалите файл migrate.exe.config. |
| ОШИБКА: Не удается обновить базу данных в соответствии с текущей моделью, так как существуют невыполненные изменения и автоматическая миграция отключена. Запишите ожидаемые изменения модели в миграцию на основе кода или включите автоматическую миграцию. Задайте для dbMigrationsConfiguration.AutomaticMigrationsEnabled значение true, чтобы включить автоматическую миграцию. | Эта ошибка возникает при выполнении миграции, если вы не создали миграцию, чтобы справиться с изменениями, внесенными в модель, и база данных не соответствует модели. Добавление свойства в класс модели, а затем выполнение migrate.exe без создания миграции для обновления базы данных является примером этого. |
| ОШИБКА: Тип не разрешен для члена 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. | Эта ошибка может быть вызвана указанием неправильного каталога запуска. Это должно быть местоположение файла migrate.exe |
| Необработанное исключение: System.NullReferenceException: ссылка на объект не задана для экземпляра объекта. в System.Data.Entity.Migrations.Console.Program.Main(String[] args) |
Это может быть вызвано отсутствием обязательного параметра для используемого сценария. Например, указывая строку подключения без указания имени поставщика. |
| ОШИБКА. В сборке ClassLibrary1 обнаружено несколько типов конфигурации миграции. Укажите имя, которое нужно использовать. | Как указано в сообщении об ошибке, в данной сборке имеется более одного класса конфигурации. Для указания, какой параметр использовать, необходимо применить ключ /configurationType. |
| ОШИБКА: не удалось загрузить файл или сборку< assemblyName> или одну из его зависимостей. Указанное имя сборки или база кода недействительна. (Исключение из HRESULT: 0x80131047) | Это может быть вызвано неправильным указанием имени сборки или отсутствием |
| ОШИБКА: не удалось загрузить файл или сборку< assemblyName> или одну из его зависимостей. Была сделана попытка загрузить программу с неверным форматом. | Это происходит, если вы пытаетесь запустить migrate.exe в приложении x64. EF 5.0 и ниже будут работать только на x86. |