Entity Framework: migrations com vários projetos e bancos de dados

Quando trabalhamos com soluções grandes, onde há vários projetos e cada um tem sua própria base de dados, assim como seu próprio versionamento usando Migrations do Entity Framework, fica meio complicado ficar alterando o Set as startup project e o Default Project na janela do Package Manager Console. Então, o ideal é apontar os projetos de configuração e dados na mesma linha de comando do Add-Migration e Update-Database.

Atualizando o banco de dados

Quando abrimos uma projeto que já tem migrations, precisamos atualizar o banco de dados, e para isso usamos o comando Update-Database. Mas podemos ser mais específico, e não precisar escolher nada em tela para que ele saiba onde achar a Connection String e Contexto, usando o comando abaixo.

Update-Database

Este comando atualiza o banco de dados com a ultima versão das migrations registradas, assim como roda algum Seed que pode popular tabelas.

-ProjectName

Nome do projeto onde está a configuração das entidades que representam os objetos do banco de dados, ou os DbSets.

-StartUpProjectName

O projeto que contém a Connection String para conexão com o banco de dados.

-ConfigurationTypeName

Nome completo, incluindo as namespaces, da entidade de configuração das migrations. Este arquivo é aquele que é gerado automaticamente ao usar o comando Enable-Migrations para ativar as migrações.

-Verbose

Este parâmetro exibe na tela todas as alterações efetuadas, assim como configurações definidas nos parâmetros anteriores.

Adicionando uma nova migração

Após atualizar o banco de dados, fazer as alterações nos objetos de domínio, precisamos adicionar a migração para depois enviar ao banco de dados as alterações versionadas, e novamente, é preciso que não precisemos definir o projeto de inicialização e dados. Para isso, use o comando a seguir:

Além dos parâmetros -ProjectName, -StartUpProjectName e -ConfigurationTypeName que já foram explicados no tópico anterior, precisamos incluir o parâmetro -Name e definir um nome que identifique qual alteração será feita no banco de dados.

Após adicionar a migration, só é preciso digitar o comando Update-Database com os parâmetros corretos.

NuGet: atualizar um pacote instalado no projeto

Introdução

Para atualizar um pacote NuGet que já está instalado em uma solução, é muito simples, porém, é preciso muita cautela e talvez alguma revisão de código. A seguir eu mostro uma atualização do pacote FluentValidator da versão 2.0.0 para a última versão.

Instale um pacote NuGet antigo

Primeiro, vamos instalar uma versão antiga do pacote FluentValidator, em uma nova solução com um projeto console.

Crie a solução com um projeto do tipo Console Application chamada NugetUpdatePackage.

Clique no menu Tools, em seguida em NuGet Package Manager e finalmente em Package Manager Console.

Em Package Manager Console, em Default project, selecione o projeto que será instalado o pacote.

Digite o comando a seguir, que irá instalar a versão 2.0.0 do FluentValidator, que não é a última:

Edite a classe Program.cs, conforme segue:

Execute o programa, e verifique o funcionamento.

Atualizando o pacote para a ultima versão

Abra a janela Package Manager Console, em Default project, selecione o projeto que será atualizado o pacote, e digite o comando a seguir, que irá atualizar para a ultima versão do FluentValidator:

Agora o nosso projeto está com a última versão, todavia, será preciso revisar o código, pois, há algumas alterações na forma de usar o pacote.

O método IsValid parece não estar funcionando, e para entender o problema, precisamos ler a documentação, ou procurar pelo recurso de Intellisense da própria IDE. E neste caso conseguimos deduzir pelo por ele mesmo.

Pronto, nosso código voltou a compilar.