Como usar o migrate.exe

As Migrações do Code First podem ser usadas para atualizar um banco de dados no Visual Studio, mas também podem ser executadas por meio da ferramenta de linha de comando migrate.exe. Esta página fornecerá uma visão geral rápida sobre como usar o migrate.exe para executar migrações em um banco de dados.

Observação

Este artigo pressupõe que você saiba usar as Migrações do Code First em cenários básicos. Caso contrário, leia Migrações do Code First antes de continuar.

Copiar o migrate.exe

Quando você instalar o Entity Framework usando o NuGet, o migrate.exe estará dentro da pasta tools do pacote baixado. Em <pasta do projeto>\packages\EntityFramework.<versão>\tools

Depois de obter o migrate.exe, você precisará copiá-lo para o local do assembly que contém as migrações.

Se o aplicativo for direcionado ao .NET 4 e não ao 4.5, copie também o Redirect.config para o local e renomeie-o como migrate.exe.config. Isso serve para que o migrate.exe obtenha os redirecionamentos de associação corretos, a fim de conseguir localizar o assembly do Entity Framework.

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

Observação

O migrate.exe não dá suporte a assemblies x64.

Depois de mover o migrate.exe para a pasta correta, você poderá usá-lo para executar migrações no banco de dados. Tudo o que o utilitário foi projetado para fazer é executar migrações. Ele não pode gerar migrações nem criar um script SQL.

Ver as opções

Migrate.exe /?

O código acima exibirá a página de ajuda associada ao utilitário. Observe que você precisará ter a EntityFramework.dll no mesmo local em que executa o migrate.exe para que isso funcione.

Migrar para a última migração

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

Durante a execução do migrate.exe, o único parâmetro obrigatório é o assembly, que é o assembly que contém as migrações que você está tentando executar, mas ele usará todas as configurações baseadas em convenção se você não especificar o arquivo de configuração.

Migrar para uma migração específica

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

Caso você deseje executar migrações até uma migração específica, especifique o nome da migração. Isso executará todas as migrações anteriores, conforme necessário, até chegar à migração especificada.

Especificar o diretório de trabalho

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

Se o assembly tiver dependências ou ler arquivos relativos ao diretório de trabalho, você precisará definir startupDirectory.

Especificar a configuração de migração a ser usada

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

Caso você tenha várias classes de configuração de migração, classes que herdam de DbMigrationConfiguration, especifique aquela que será usada para a execução. Isso é especificado fornecendo o segundo parâmetro opcional sem uma opção, conforme mostrado acima.

Fornecer a cadeia de conexão

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

Caso você deseje especificar uma cadeia de conexão na linha de comando, forneça também o nome do provedor. A não especificação do nome do provedor causará uma exceção.

Problemas comuns

Mensagem de Erro Solução
Exceção sem tratamento: System.IO.FileLoadException: Não foi possível carregar o arquivo ou o assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ou uma das dependências. A definição do manifesto do assembly localizado não corresponde à referência do assembly. (Exceção de HRESULT: 0x80131040) Normalmente, isso significa que você está executando um aplicativo .NET 4 sem o arquivo Redirect.config. Você precisa copiar o Redirect.config para o mesmo local do migrate.exe e renomeá-lo como migrate.exe.config.
Exceção sem tratamento: System.IO.FileLoadException: Não foi possível carregar o arquivo ou o assembly 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ou uma das dependências. A definição do manifesto do assembly localizado não corresponde à referência do assembly. (Exceção de HRESULT: 0x80131040) Essa exceção significa que você está executando um aplicativo .NET 4.5 com o Redirect.config copiado para o local do migrate.exe. Se o aplicativo for .NET 4.5, você não precisará ter o arquivo de configuração com os redirecionamentos contidos nele. Exclua o arquivo migrate.exe.config.
ERRO: Não é possível atualizar o banco de dados para que ele corresponda ao modelo atual, porque há alterações pendentes e a migração automática está desabilitada. Grave as alterações de modelo pendentes em uma migração baseada em código ou habilite a migração automática. Defina DbMigrationsConfiguration.AutomaticMigrationsEnabled como true para habilitar a migração automática. Esse erro ocorrerá se a execução da migração não tiver criado uma migração para lidar com as alterações feitas no modelo e o banco de dados não corresponder ao modelo. Um exemplo disso é adicionar uma propriedade a uma classe de modelo e, em seguida, executar o migrate.exe sem criar uma migração para atualizar o banco de dados.
ERRO: O tipo não foi resolvido para o membro 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Esse erro pode ser causado pela especificação de um diretório de inicialização incorreto. Este precisa ser o local do migrate.exe
Exceção sem tratamento: System.NullReferenceException: Referência de objeto não definida como uma instância de um objeto.
   em System.Data.Entity.Migrations.Console.Program.Main(argumentos String[])
Isso pode ser causado pela não especificação de um parâmetro obrigatório para um cenário que você está usando. Por exemplo, especificar uma cadeia de conexão sem o nome do provedor.
ERRO: Mais de um tipo de configuração de migrações foi encontrado no assembly 'ClassLibrary1'. Especifique o nome a ser usado. Como o erro indica, há mais de uma classe de configuração no assembly fornecido. Use a opção /configurationType para especificar aquela que será usada.
ERRO: Não foi possível carregar o arquivo ou o assembly ‘<assemblyName>’ ou uma das dependências. A base de código ou o nome do assembly especificado era inválido. (Exceção de HRESULT: 0x80131047) Isso pode ser causado pela especificação de um nome de assembly incorreto ou a ausência dele
ERRO: Não foi possível carregar o arquivo ou o assembly ‘<assemblyName>’ ou uma das dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto. Isso acontecerá se você estiver tentando executar o migrate.exe em um aplicativo x64. O EF 5.0 e inferior só funcionará em x86.