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)
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 :
O comando: Scaffold-DbContext
A string de conexão do banco de dados : "Data Source=.\;Initial Catalog=Estudo;Integrated Security=True"
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Entity Framework - Conceitos Básicos - Uma visão geral - Macoratti
Entity Framework - Separando as classes das entidades do ... - Macoratti
Entity Framework 6 - Aplicação em camadas - Definindo o ... - Macoratti
C# - Cadastro de Clientes com Entity Framework em ... - Macoratti
NET - Entity Framework 5 - Operações CRUD (revisitado) - Macoratti
https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite