Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
As migrações Code First podem ser usadas para atualizar uma base de dados a partir do Visual Studio, mas também podem ser executadas através da ferramenta de linha de comandos migrate.exe. Esta página dará uma visão geral rápida sobre como usar migrate.exe para executar migrações numa base de dados.
Observação
Este artigo assume que você sabe usar Migrações Code First em cenários básicos. Se não o fizeres, então terás de ler Code First Migrations antes de continuar.
Copiar migrate.exe
Quando instalares o Entity Framework usando NuGet migrate.exe estará dentro da pasta de ferramentas do pacote descarregado. No <pasta do projeto>\packages\EntityFramework.<versão>\ferramentas
Depois de obteres o migrate.exe, tens de o copiar para o local da assembly que contém as tuas migrações.
Se a sua aplicação tiver como objetivo .NET 4 e não 4.5, então terá de copiar o Redirect.config para a localização e renomeá-lo migrate.exe.config. Isto é para que migrate.exe receba os redirecionamentos de binding corretos para conseguir localizar a assembly do Entity Framework.
| .NET 4.5 | .NET 4.0 |
|---|---|
|
|
Observação
migrate.exe não suporta assemblies x64.
Depois de migrate.exe moveres para a pasta correta, deves conseguir usá-lo para executar migrações na base de dados. Tudo o que a ferramenta foi concebida para fazer é executar migrações. Não pode gerar migrações nem criar um script SQL.
Ver opções
Migrate.exe /?
O que está acima mostrará a página de ajuda associada a esta utilidade; note que terá de ter o EntityFramework.dll no mesmo local onde está a correr migrate.exe para que isto funcione.
Migrar para a versã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 está a tentar executar, mas usará todas as definições baseadas em convenções se não especificar o ficheiro de configuração.
Migrar para uma migração específica
Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /targetMigration="AddTitle"
Se quiseres executar migrações até uma migração específica, podes especificar o nome da migração. Isto 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 teu assembly tiver dependências ou ler ficheiros em relação ao diretório de trabalho, então terás de definir o Diretório de Arranque.
Especifique a configuração de migração a usar
Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"
Se tiver múltiplas classes de configuração de migração, classes herdadas do DbMigrationConfiguration, então precisa de especificar quais serão usadas nesta execução. Isto é especificado fornecendo o segundo parâmetro opcional sem interruptor, como acima.
Fornecer string de conexão
Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"
Se quiser especificar uma cadeia de ligação na linha de comandos, deve também fornecer o nome do fornecedor. Não especificar o nome do fornecedor causará uma exceção.
Problemas Comuns
| Mensagem de erro | Solução |
|---|---|
| Exceção não tratada: System.IO.FileLoadException: Não foi possível carregar ficheiro ou assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ou uma das suas dependências. A definição manifesta da assembleia localizada não corresponde à referência da assembleia. (Exceção do HRESULT: 0x80131040) | Isto normalmente significa que está a executar uma aplicação .NET 4 sem o ficheiro Redirect.config. Tens de copiar o Redirect.config para o mesmo local que migrate.exe e renomeá-lo para migrate.exe.config. |
| Exceção não tratada: System.IO.FileLoadException: Não foi possível carregar ficheiros ou assembly 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ou uma das suas dependências. A definição manifesta da assembleia localizada não corresponde à referência da assembleia. (Exceção do HRESULT: 0x80131040) | Esta exceção significa que está a executar uma aplicação .NET 4.5 com a Redirect.config copiada para a localização migrate.exe. Se a tua aplicação for .NET 4.5, então não precisas de ter o ficheiro de configuração com os redirecionamentos dentro. Apaga o ficheiro migrate.exe.config. |
| ERRO: Não é possível atualizar a base de dados para corresponder ao modelo atual porque há alterações pendentes e a migração automática está desativada. Ou escreve as alterações pendentes do modelo numa migração baseada em código ou ativa a migração automática. Defina DbMigrationsConfiguration.AutomaticMigrationsEnabled para true para permitir a migração automática. | Este erro ocorre se estiver a executar a migração quando não foi criada uma migração para lidar com alterações feitas ao modelo, e a base de dados não corresponde ao modelo. Adicionar uma propriedade a uma classe modelo e depois executar migrate.exe sem criar uma migração para atualizar a base de dados é um exemplo disto. |
| 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'. | Este erro pode ser causado por especificar um diretório de arranque incorreto. Este deve ser o local da migrate.exe |
| Exceção não tratada: System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto. em System.Data.Entity.Migrations.Console.Program.Main(String[] args) |
Isto pode ser causado por não especificar um parâmetro obrigatório para o cenário que está a usar. Por exemplo, especificar uma cadeia de ligação sem especificar o nome do fornecedor. |
| ERRO: Mais do que um tipo de configuração de migração foi encontrado na assembly 'ClassLibrary1'. Especifique o nome a utilizar. | Como indica o erro, existe mais do que uma classe de configuração na dada assembleia. Deve usar o interruptor /configurationType para especificar qual usar. |
| ERRO: Não foi possível carregar o ficheiro ou assembly '<assemblyName>' ou uma das suas dependências. O nome de assembly ou base de código dado era inválido. (Exceção do HRESULT: 0x80131047) | Isto pode ser causado por especificar incorretamente um nome de montagem ou por não ter |
| ERRO: Não foi possível carregar o ficheiro ou assembly '<assemblyName>' ou uma das suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto. | Isto acontece se estiveres a tentar correr migrate.exe contra uma aplicação x64. EF 5.0 e inferiores só funcionam em x86. |