EF Core - Usando a abordagem DataBase First - Criando uma aplicação console

 Neste artigo vamos criar uma aplicação Console no VS 2017  usando o Entity Framework Core e acessando o SQL Server usando uma abordagem DataBase First.

O Entity Framework Core (EF Core) é uma versão leve, extensível e multiplataforma do Entity Framework. O EF Core introduz muitas melhorias e novos recursos quando comparado com o EF6.x.  O EF Core mantém a experiência do desenvolvedor do EF6.x e a maioria das APIs de alto nível permanecem as mesmas, então o EF Core vai te parecer muito familiar se você conhece o Entity Framework 6.x.

Ao mesmo tempo, o EF Core é construído sobre um conjunto completamente novo de componentes principais. Isso significa que o EF Core não herda automaticamente todos os recursos do EF6.x. Alguns desses recursos serão exibidos em lançamentos futuros (como o lazy loading e a resiliência de conexão), outros recursos menos usados não serão implementados no EF Core.  O novo núcleo, extensível e leve também permitiu adicionar alguns recursos ao EF Core que não serão implementados no EF6.x.

Para acompanhar este artigo você precisa ter instalado o Visual Studio Community 2017 com os seguintes workloads(cargas de trabalho) instalados:

Requisitos

Criando o projeto console :  EstudantesEFCore

A aplicação exemplo que vamos construir nesse artigo é uma simples aplicação console que acessa as informações de uma tabela Estudantes de um banco de dados chamado Estudo.mdf do SQL Server usando o EF Core 1.1.

Abra no VS Community 2017 e no menu File clique em New Project;

A seguir selecione o template Visual C# -> Console App(.NET Framework);

Dessa forma estamos criando uma aplicação Console usando o .NET Framework. (Não estamos usando o .NET Core).

Esteja certo de que a versão do .NET Framework usada seja superior à versão 4.5.1.

Informe o nome EstudantesEFCore (ou outro a seu gosto) e clique no botão OK;

Temos assim uma aplicação que será o nosso ponto de partida.

Criando o banco de dados Cadastro e a tabela Estudante no SQL Server

A  abordagem DataBase First parte de um banco de dados existente e assim você deve ter um banco de dados e as tabelas já criadas e prontas para uso.

Para criar o banco de dados Estudo no SQL Server você pode usar o script abaixo: (Ou pode criar diretamente no SQL Server Management Studio)

USE [master]
GO
CREATE DATABASE [Estudo]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'Estudo', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\Estudo.mdf' 
, SIZE = 140288KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'Estudo_log', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\Estudo_log.ldf'
 , SIZE = 149696KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

O script para criar a tabela Estudantes vem a seguir :

USE [Estudo]
GO
CREATE TABLE [dbo].[Estudantes](
	[EstudanteId] [int] IDENTITY(1,1) NOT NULL,
	[Email] [nvarchar](max) NULL,
	[Nome] [nvarchar](max) NULL,
 CONSTRAINT [PK_Estudantes] PRIMARY KEY CLUSTERED 
(
	[EstudanteId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Vamos precisar conhecer a string de conexão deste banco de dados no SQL Server. Para o meu exemplo a string de conexão é :  Data Source=.\;Initial Catalog=Estudo;Integrated Security=True

Você pode obter a string de conexão abrindo o Server Explorer e a seguir abrir uma conexão com o banco Estudo e depois pressionar F4 e ver na janela de propriedades a string de conexão.

Adicionando o suporte para o Entity Framework Core via Nuget

Vamos adicionar o suporte ao EF Core em nosso projeto e instalar o provedor do banco de dados que vamos usar. No exemplo deste artigo vamos instalar o provedor SQL Server :

Para instalar esse via menu Tools e e clicar em Nuget Package Manager e a seguir em Manage Nuget Packages for Solution;

Vamos instalar os pacotes :

Estes pacote e suas dependências fornecem o suporte em tempo de execução ao EF e as ferramentas de design para o SqlServer.

Vamos instalar também o pacote Microsoft.EnityFrameworkCore.Tools no projeto para ter acesso ao Migrations :

Nota:  O EF para no .NET Core não possui todas as funcionalidades do EF 6. (lazy loading não esta suportado ainda)

Criando o nosso modelo de dados a partir das tabelas existentes

Agora que temos o suporte ao EF Core vamos criar as classes das entidades para a nossa aplicação e vamos fazer isso nos baseando no banco de dados Estudo existente.

No menu Tools clique em Package Manager Console e a seguir na janela do console digite o comando:


Scaffold-DbContext "Data Source=.\;Initial Catalog=Estudo;Integrated Security=True" Microsoft.EntityFrameworkCore.SqlServer

 

Nesta instrução temos :

  1. O comando:  Scaffold-DbContext

  2. A string de conexão do banco de dados : "Data Source=.\;Initial Catalog=Estudo;Integrated Security=True"

  3. O nome do provedor usado :  Microsoft.EntityFrameworkCore.SqlServer

Na figura abaixo vemos o comando após a sua execução gerar as classe Estudantes.cs e EstudoContext.cs :

 

 

Nota:  Para saber mais sobre os comandos da ferramenta de linha de comando consulte este link : https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

 

O processo de engenharia reversa criou a classe de entidade e um contexto derivado baseado no esquema do banco de dados existente. As classes de entidade são objetos C# simples que representam os dados que você estará consultando e salvando. No nosso exemplo as informações de estudantes da tabela Estudantes.


Veja o código gerado para a classe Estudantes :

 

namespace EstudantesEFCore
{
    public partial class Estudantes
    {
        public int EstudanteId { get; set; }
        public string Nome { get; set; }
        public string Email { get; set; }
    }
}

 

Esta classe representa o nosso modelo de domínio e será mapeada para a tabela Estudantes.

 

E para a classe EstudoContext :

 

using Microsoft.EntityFrameworkCore;
namespace EstudantesEFCore
{
    public partial class EstudoContext : DbContext
    {
        public virtual DbSet<Estudantes> Estudantes { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Data Source=.\;Initial Catalog=Estudo;Integrated Security=True");
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Estudantes>(entity =>
            {
                entity.HasKey(e => e.EstudanteId)
                    .HasName("PK_Estudantes");
                entity.Property(e => e.Email)
                    .IsRequired()
                    .HasMaxLength(150);
                entity.Property(e => e.Nome)
                    .IsRequired()
                    .HasMaxLength(100);
            });
        }
    }
}

 

A classe EstudoContext é a classe responsável pela interação com os objetos de dados sendo derivada da classe System.Data.Entity.DbContext (muitas vezes referida como o contexto).

Essa classe de contexto administra os objetos entidades durante o tempo de execução, o que inclui preencher objetos com dados de um banco de dados, controlar alterações, e persistir dados para o banco de dados.

Este código cria uma propriedade DbSet para a entidade Estudantes. Na terminologia Entity Framework, um conjunto de entidades corresponde a uma tabela de banco de dados e uma entidade corresponde a uma linha na tabela.

Na janela Solution Explorer nosso projeto terá agora a seguinte estrutura:

Usando o modelo criado em nossa aplicação Console

Vamos agora usar o modelo de entidades criado a partir do banco de dados em nossa aplicação Console.

Abra o arquivo Program.cs e digite o código abaixo no método Main() :

using System;
namespace EstudantesEFCore
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var db = new EstudoContext())
            {
                db.Estudantes.Add(new Estudantes { Nome="Maria",  Email="maria@net.com" });
                db.Estudantes.Add(new Estudantes { Nome = "Manoel", Email = "manoel@net.com" });
                db.Estudantes.Add(new Estudantes { Nome = "Pedro", Email = "pedro@net.com" });
                var contador = db.SaveChanges();

                Console.WriteLine("{0} registros salvos no banco de dados : ", contador);
                Console.WriteLine();
                Console.WriteLine("Todos os estudantes no banco de dados:");

                foreach (var estudante in db.Estudantes)
                {
                    Console.WriteLine(" - {0}", estudante.Nome);
                }
                Console.ReadKey();
            }
        }
    }
}

Neste código estamos criando uma instância do nosso contexto (EstudoContext) e a seguir criando 3 objetos Estudantes que estão sendo adicionados ao contexto usando o método Add (  db.Estudantes.Add ).

O método SaveChanges é usado para persistir as informações na tabela e a seguir exibimos as informações no console.

Abaixo vemos o resultado da execução do projeto :

Abrindo o banco de dados Estudo no Server Explorer podemos constatar que os registros foram realmente incluidos:

E assim vimos como é simples criar um modelo de entidades a partir de um banco de dados existente usando o Entity Framework Core 1.1.

1 Todo aquele que crê que Jesus é o Cristo, é nascido de Deus; e todo aquele que ama ao que o gerou também ama ao que dele é nascido. 2 Nisto conhecemos que amamos os filhos de Deus, quando amamos a Deus e guardamos os seus mandamentos.
1 João 5:1,2

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 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti