EF Core 2.0 - Scaffolding DbContext e Models usando CLI - I


Neste artigo veremos como usar as ferramentas para realizar o Scaffolding com Entity Framework Core 2.0 usando o Visual Studio Code.

O Entity Framework Core 2.0 foi lançado em setembro de 2017 e trouxe melhorias significativas tornando-se uma opção robusta que você pode usar para ajudá-lo a configurar a sua camada de acesso a dados.

Na maioria dos casos você vai usar a abordagem Code-First, especialmente em novos projetos. No entanto existem muitos cenários nos quais já existe um banco de dados e você precisa usar a abordagem database first.  Nestes casos você pode usar a ferramenta de Scaffolding e partindo do banco de dados e suas tabelas gerar o modelo de entidades e o contexto.

Neste artigo veremos como fazer isso usando o EF Core 2.0 e o Visual Studio Code.

Nota: Quando este artigo foi escrito as versões atuais do .NET Core SDK usado era a versão 2.0.3. A versão usada para as ferramentas foi a v 2.0.1. Para manter a compatibilidade entre os pacotes vou usar a versão 2.0.0 de cada pacote.

Recursos Usados:

Usando o EFCore Tools e a NET CLI para gerar o modelo de entidades

Antes de prosseguir vamos deixar claro que não vamos usar o Visual Studio e sim o Visual Studio Code e a ferramenta de linha de comando NET CLI.

Vamos criar o projeto usando a NET CLI e  gerar o modelo de entidades usando o EFCore Tools.

Criando um projeto do tipo Console

Abra uma janela de comandos e crie uma pasta onde o projeto será hospedado.

No exemplo eu vou criar uma pasta chamada EFCoreModels md EFCoreModels

A seguir entre na pasta criada : cd efcoremodels e crie o projeto do tipo console usando o comando : dotnet new console

Na imagem abaixo vemos o projeto criado na pasta efcoremodels:

Usando a ferramenta EFCore Tools para gerar o modelo de entidades

A ferramenta EF Core Tools vai permitir gerar o modelo de entidades a partir do banco de dados existente e ela atua no contexto da ferramenta dotnet CLI.

A primeira coisa a fazer e incluir no projeto os pacotes do Entity FrameworkCore  usando o comando : dotnet add package Microsoft.EntityFrameworkCore -v 2.0.0

Como desejamos gerar o modelo de entidades a partir do banco de dados faremos a engenharia reversa usando o comando Scaffold DbContext e para isso temos que instalar também o pacote Microsoft.EntityFrameworkCore.Design.

Este pacote contém toda a lógica em tempo de projeto que é executada usando os comandos Add-Migration, dotnet ef, etc.

Para instalar esse pacote digite o comando :  dotnet add package Microsoft.EntityFrameworkCore.Design -v 2.0.0

Para poder executar os comandos dotnet ef precisamos instalar o pacote Microsoft.EntityFrameworkCore.Tools.DotNet usando o comando :
dotnet add package Microsoft.EntityFrameworkCore.Tools.DotNet -v 2.0.0

Se você esta pensando que após fazer isso o processo foi concluido se enganou...

Você ainda vai ter que incluir uma referência ao pacote Microsoft.EntityFrameworkCore.Tools.DotNet no seu arquivo de projeto : efcoremodels.csproj para habilitar a integração com a ferramenta CLI.

Neste momento ao abrirmos o arquivo efcoremodels.csproj no Visual Studio Code veremos as referências aos pacotes incluídas conforme abaixo:

Inclua a referência conforme mostra a figura abaixo :

Agora com todos os pacotes e referências definidas no projeto podemos usar os recursos da EF Core Tools.

Vamos iniciar aplicando os recursos em um banco de dados SQL Server.

1-  EF Core Tools com SQL Server

A primeira coisa a fazer é instalar o provedor do SQL Sever :
dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 2.0.0

Agora sim, digitando o comando : dotnet ef -h veremos o seguinte resultado indicando que temos os comandos disponíveis:

Gerando o modelo de entidades

Agora basta definir qual o banco de dados SQL Server a partir do qual desejamos gerar o modelo de entidades.

Como exemplo vou usar um banco de dados SQL Server chamado Escola.mdf contendo diversas tabelas conforme mostra a figura a seguir:

O comando usado para gerar o modelo de entidades a partir do banco de dados é  :

dotnet ef dbcontext scaffold <string de conexão>  Provider -o Models -f -c DemoDbContext

Onde :

dotnet ef dbcontext - comando
<string de conexão> -
a string de conexão do banco de dados usado
Provider - 
o provedor do banco de dados
-o Models -
a pasta de sáida das classes geradas
-f - s
obrescreve um código anteriormente gerado
-c DemoDbContext -
o nome do DbContext usado na aplicação

Então para o banco de dados Escola.mdf cuja string de conexão é :  Data Source=MACORATTI;Initial Catalog=Escola;Integrated Security=True temos o seguinte comando:

dotnet ef dbcontext scaffold "Data Source=MACORATTI;Initial Catalog=Escola;Integrated Security=True"  Microsoft.EntityFrameworkCore.SqlServer -o Models -f -c DemoDbContext 

Antes de executar o comando acima vamos buildar o projeto e verificar se não existem erros: 
dotnet build
Agora executando comando : 

dotnet ef dbcontext scaffold "Data Source=MACORATTI;Initial Catalog=Escola;Integrated Security=True"  Microsoft.EntityFrameworkCore.SqlServer -o Models -f -c DemoDbContext 

Iremos obter o seguinte resultado no projeto exibido no VS Code:
Como era esperado vemos a pasta Models e no seu interior as classes geradas representando o modelo de entidades que mapeia para cada tabela existente no banco de dados; temos também o contexto representando pelo arquivo DemoDbContext.cs .

Agora eu posso instanciar o DemoDbContext no aplicativo e começar a interagir com o banco de dados.

Pegue o projeto completo aqui: efcoremodels.zip

"(Disse Jesus) - Quem ama a sua vida perdê-la-á, e quem neste mundo odeia a sua vida, guardá-la-á para a vida eterna."
João 12:25

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti