EF Core - Apresentando e usando o Migrations - III


Hoje vamos continuar a série de artigos que apresenta o Migrations e seus principais recursos.

Continuando o artigo anterior veremos como podemos criar a migração se os arquivos das entidades e do contexto estiverem em um projeto separado.

Até o momento estamos aplicando as migrações e temos os arquivos das entidades e do contexto no mesmo projeto, inclusive na mesma pasta Models.

Em muitos projetos podemos ter os arquivos das entidades e do contexto em um projeto diferente.

Neste cenário como podemos aplicar as Migrações que estamos fazendo ?

Vamos mostrar isso na prática.

Vamos abrir o projeto e incluir um novo projeto chamado Entidades do tipo Class Library (.NET Core) usando o menu File -> Add -> New Project;

Vamos criar uma pasta Models neste projeto e remover o arquivo Class1.cs criado por padrão.

Agora precisamos incluir dois pacotes do Entity Framework neste projeto:

  1. Install-Package Microsoft.EntityFrameworkCore -Version 3.1.5
  2. Install-Package Microsoft.EntityFrameworkCore.Relational -Version 3.1.5

A seguir vamos incluir uma referência no projeto AspNet_EFCoreApi ao projeto Entidades que acabamos de criar.

No menu Project-> Add Project Reference,  marque o projeto Entidades e clique em OK;

Agora vamos mover os arquivos das entidades e do contexto da pasta Models do projeto AspNet_EFCoreApi para a pasta Models do projeto Entidades.

Ao final a estrutura da solução deverá estar da seguinte forma:

Agora temos que alterar o namespaces usados nos arquivos Aluno e AppDbContext para Entidades.Models.

Vamos ter que repetir esse procedimento no arquivo Startup.cs e nos arquivos de Migração criados no projeto AspNet_EFCoreApi (São os arquivos *.Designer.cs), e, teremos que remover o namespace AspNet_EFCoreApi.Models.

Após isso vamos dar um Build na Solution e ver se não existem erros.

Não havendo erros vamos tentar aplicar uma nova migração digitando:

add-migration TesteMigracaoProjetoSeparado

Observe que estamos obtendo um erro que informa que o projeto AspNet_EFCoreApi não coincide com o assembly 'Entidades'.

Teremos que mudar o nosso assembly das Migrations de Entidades para AspNet_EFCoreApi usando o método MigrationsAssembly que configura o assembly onde as migrações serão mantidas:

Para fazer isso vamos abrir o arquivo Startup do projeto AspNet_EFCoreApi e incluir o código abaixo:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<AppDbContext>(
               options => options.
               UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), 
                 options=>options.MigrationsAssembly("AspNet_EFCoreApi")));
            services.AddControllers();
        }

Após isso vamos repetir o comando para incluir a nova migração:

Agora a migração foi criada com sucesso na pasta Migrations do projeto AspNet_EFCoreApi:

Como era apenas  um teste podemos remover essa migração usando :  remove-migration

Pegue o projeto aqui : AlunosWeb_3.zip (sem as referências)

"E a paz de Deus, que excede todo o entendimento, guardará os vossos corações e os vossos pensamentos em Cristo Jesus."
Filipenses 4:7

Referências:


José Carlos Macoratti