EF Core -  Configurando o ambiente para aplicar o Migrations


  No artigo de hoje veremos como configurar o ambiente para aplicar o Migrations do EF Core

O Migrations é uma ferramenta do Entity Framework Core que permite que você versione o seu modelo de dados e aplique as alterações de forma ordenada no banco de dados.

Com o Migrations, você pode definir as alterações que deseja fazer no seu modelo de dados como classes de migração, que são adicionadas a uma sequência de migrações. Quando você aplica essas migrações ao banco de dados, o EF Core compara as migrações que já foram aplicadas ao banco de dados com as migrações que ainda não foram aplicadas e aplica apenas as novas migrações na sequência correta.
 
Desta forma após você definir as entidades do seu modelo de domínio e o relacionamento entre elas e também definir a string de conexão no arquivo appsettings do projeto você têm tudo pronto para aplicar o migrations.
 
Então quais os pacotes são necessários para aplicar o migrations ?

Você vai precisar do pacote do provedor do banco de dados que você esta usando.
Se você estiver usando o SQL Server o pacote Nuget usado é : Microsoft.EntityFrameworkCore.SqlServer que é um provedor do EF Core para acessar o SQL Server.
 
O comando usado para instalar este pacote é  :
Install-Package Microsoft.EntityFrameworkCore.SqlServer
 
Aplicando o Migrations
 
Para aplicar os comandos do Migrations temos duas opções :
 
1 - Usar o pacote Microsoft.EntityFrameworkCore.Tools
 
Este pacote é uma extensão do Entity Framework Core que fornece uma série de ferramentas de linha de comando para facilitar o desenvolvimento de aplicativos baseados em EF Core. Dentre os comandos mais usados oferecidos por este pacote temos:
 
  • Add-Migration <nome-migração> : Gera uma migração com base nas alterações no modelo de entidade do aplicativo.
     
  • Update-Database: Aplica as migrações mais recentes ao banco de dados
  • Para instalar este pacote use o comando :

    2- Usar o pacote Microsoft.EntityFrameworkCore.Design
     
    Este pacote nuget é necessário apenas se você for usar a ferramenta dotnet ef do EF Core pois ele fornece a funcionalidade necessária para o comando dotnet ef descobrir e usar o seu arquivo de contexto e as configurações do banco de dados e permite executar as operações de migração do banco de dados em seu projeto.

    Usando a ferramento dotnet ef

    A ferramenta dotnet ef pode ser instalada usando o comando :
    dotnet tool install --global dotnet-ef

    Os principais comandos desta ferramenta para gerenciar Migrações são :
     
    1- Criar uma nova migração:  dotnet ef migrations add <nome_da_migracao>

    Esse comando cria uma nova migração com o nome especificado. A migração é criada com base nas diferenças entre o modelo de dados atual e o modelo de dados anterior.

    2 Aplicar migrações pendentes ao banco de dados:  dotnet ef database update

    Este comando aplica as migrações pendentes ao banco de dados. Ele verifica a tabela __EFMigrationsHistory para determinar quais migrações ainda precisam ser aplicadas.

    3- Listar as migrações pendentes:  dotnet ef migrations list

    Este comando lista todas as migrações pendentes que ainda não foram aplicadas ao banco de dados.

    3- Desfazer a última migração:   dotnet ef migrations remove

    Este comando desfaz a última migração aplicada. Ele remove a última migração da lista de migrações aplicadas e exclui o arquivo da migração do projeto. Este comando não afeta o banco de dados.

    4- Gerar um script SQL para aplicar migrações pendentes:  dotnet ef migrations script

    Este comando gera um script SQL que pode ser usado para aplicar as migrações pendentes em um banco de dados manualmente. O script inclui todas as instruções SQL necessárias para aplicar as migrações pendentes na ordem correta.
     
    Assim para aplicar o Migrations usando a ferramenta dotnet ef você precisa instalar no seu projeto os pacotes : (Considerando o uso do SQL Server)
    Se não for usar a ferramenta dotnet ef precisa instalar :

    Projeto em camadas

    Se você tem um projeto em camadas e o contexto do Entity Framework Core está na camada de infraestrutura, você precisa informar o caminho para a camada de infraestrutura onde o contexto está localizado.

    Para isso, você pode usar as opções:

    a-) Para criar uma nova migração, use o seguinte comando no diretório do projeto:

    dotnet ef migrations add <NOME_DA_MIGRAÇÃO> -p NomeDoProjeto.Infra -s NomeDoProjeto.UI

    Onde NomeDoProjeto é o nome do seu projeto em camadas. Observe que a opção -p especifica o caminho para a camada de infraestrutura e a opção -s especifica o diretório do projeto de inicialização, que geralmente é a camada de interface do usuário (UI).

    b-) Para aplicar as migrações pendentes no banco de dados, use o seguinte comando:

    dotnet ef database update -p NomeDoProjeto.Infra -s NomeDoProjeto.UI

    Esse comando aplica todas as migrações pendentes no banco de dados configurado no contexto especificado na camada de infraestrutura.

    Se o seu arquivo de contexto - AppDbContext - estiver em uma camada ou pasta específica, você pode especificar o caminho para o arquivo de contexto usando a opção -c ou --context.

    c-) Para criar uma nova migração, use o seguinte comando no diretório do projeto:

    dotnet ef migrations add <NOME_DA_MIGRAÇÃO> --context AppDbContext -p NomeDoProjeto.Infra -s NomeDoProjeto.UI

    Onde NomeDoProjeto é o nome do seu projeto em camadas e AppDbContext é o nome do seu arquivo de contexto.

    d-) Para aplicar as migrações pendentes no banco de dados, use o seguinte comando:

    dotnet ef database update --context AppDbContext -p NomeDoProjeto.Infra -s NomeDoProjeto.UI

    Esse comando aplica todas as migrações pendentes no banco de dados configurado no contexto especificado.

    E estamos conversados...

    "Louvai ao SENHOR. Louvai ao SENHOR desde os céus, louvai-o nas alturas.
    Louvai-o, todos os seus anjos; louvai-o, todos os seus exércitos.
    Louvai-o, sol e lua; louvai-o, todas as estrelas luzentes."
    Salmos 148:1-3

    Referências:


    José Carlos Macoratti