Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As Primeiras Migrações de Código podem ser usadas para atualizar um banco de dados de dentro do 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 migrate.exe para executar migrações em um banco de dados.
Observação
Este artigo pressupõe que você saiba como usar as Migrações do Code First em cenários básicos. Se não, será necessário ler Code First Migrations antes de continuar.
Copiar migrate.exe
Quando você instala o Entity Framework usando o NuGet migrate.exe estará dentro da pasta de ferramentas do pacote baixado. No <diretório> do projeto\packages\EntityFramework.<version>\tools
Depois de obter o arquivo migrate.exe, você precisará copiá-lo para o local do assembly que contém suas migrações.
Se o aplicativo for direcionado ao .NET 4 e não ao 4.5, você precisará copiar o Redirect.config para o local e renomeá-lo migrate.exe.config. Isso é para que migrate.exe obtenha os redirecionamentos de associação corretos para poder localizar o assembly do Entity Framework.
| .NET 4.5 | .NET 4.0 |
|---|---|
|
|
Observação
migrate.exe não dá suporte a assemblies x64.
Depois de mover migrate.exe para a pasta correta, você deverá poder usá-la 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 ou criar um script SQL.
Ver opções
Migrate.exe /?
A página de ajuda acima exibirá a página de ajuda associada a esse utilitário, observe que você precisará ter o EntityFramework.dll no mesmo local que você está executando migrate.exe para que isso funcione.
Migrar para a migração mais recente
Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"
Ao executar 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"
Se você quiser executar migrações até uma migração específica, poderá especificar o nome da migração. Isso executará todas as migrações anteriores conforme necessário até chegar à migração especificada.
Especificar 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 o startupDirectory (diretório de inicialização).
Especificar a configuração de migração a ser usada
Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"
Se você tiver várias classes de configuração de migração, classes herdando de DbMigrationConfiguration, será necessário especificar qual será usado para essa execução. Isso é especificado ao fornecer o segundo parâmetro opcional sem um modificador, como acima.
Forneça a string de conexão
Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"
Se você quiser especificar uma cadeia de conexão na linha de comando, também deverá fornecer o nome do provedor. Não especificar o 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 assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ou uma de suas dependências. A definição do manifesto do assembly localizado não corresponde à referência do assembly. (Exceção de HRESULT: 0x80131040) | Isso normalmente significa que você está executando um aplicativo .NET 4 sem o arquivo Redirect.config. Você precisa copiar o Redirect.config para o mesmo local que migrate.exe e renomeá-lo para migrate.exe.config. |
| Exceção sem tratamento: System.IO.FileLoadException: não foi possível carregar o arquivo ou assembly 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ou uma de suas dependências. A definição do manifesto da assemblagem localizada não corresponde à referência da assemblagem. (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 migrate.exe. Se o aplicativo for .NET 4.5, você não precisará ter o arquivo de configuração com os redirecionamentos dentro. Exclua o arquivo migrate.exe.config. |
| ERRO: Não é possível atualizar o banco de dados para corresponder ao modelo atual porque há alterações pendentes e a migração automática está desabilitada. Escreva 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 ocorre ao executar o comando de migração sem ter criado uma migração para lidar com as mudanças no modelo, resultando no banco de dados não estando alinhado com o modelo. Adicionar uma propriedade a uma classe de modelo e, em seguida, executar migrate.exe sem criar uma migração para atualizar o banco de dados é um exemplo disso. |
| 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 especificando um diretório de inicialização incorreto. Esse deve ser o local de migrate.exe |
| Exceção sem tratamento: System.NullReferenceException: referência de objeto não atribuída a uma instância de um objeto. em System.Data.Entity.Migrations.Console.Program.Main(String[] args) |
Isso pode ser causado por não especificar um parâmetro necessário para um cenário que você está usando. Por exemplo, especificar uma cadeia de conexão sem especificar o nome do provedor. |
| ERRO: mais de um tipo de configuração de migrações foi encontrado no assembly 'ClassLibrary1'. Especifique o nome daquele que deve ser utilizado. | Como o erro indica, há mais de uma classe de configuração no assembly fornecido. Você deve usar a opção /configurationType para especificar qual usar. |
| ERRO: não foi possível carregar o arquivo ou assembly '<assemblyName>' ou uma de suas dependências. O nome do assembly ou base de código fornecido era inválido. (Exceção de HRESULT: 0x80131047) | Isso pode ser causado pela especificação incorreta do nome do assembly ou pela ausência de |
| ERRO: não foi possível carregar o arquivo ou assembly '<assemblyName>' ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto. | Isso acontece se você estiver tentando executar migrate.exe em um aplicativo x64. EF 5.0 e abaixo só funcionarão em x86. |