Iniciando com Entity Framework Core
Rafael Dias
Posted on January 26, 2020
Olá pessoal, este artigo está sendo feito para quem estiver com o intuito de iniciar no EF Core e não faz ideia por onde começar. Deste modo, não estarei trazendo a melhor estrutura e nem me preocupando com boas práticas por questões didáticas. Contudo, o artigo tem a intenção de explicar de forma clara e objetiva sobre o EF Core, assim iniciaremos o projeto.
O que seria o Entity Framework Core? onde habita? o que faz ?. O Entity Framework Core é um dos muitos ORMs (Object-Relational Mapping) que do português seria (Mapeador Objeto Relacional), ele consegue mapear as propriedades da suas entidades em tableas do banco de dados. Com isto, ele aumenta absurdamente a produtividade de seu projeto, o codigo fica bem mais legivel e padronizado trazendo muitos beneficios na manutenção.
Configuração
O ambiente de desenvolvimento está configurado com as seguintes ferramentas:
Com tudo instalado e configurado, está na hora de iniciar o projeto.
Iniciando o Projeto
Escolha uma pasta de sua preferência, eu estarei criando uma pasta chamada EFConsole
Abra o terminal e execute o seguinte comando:
mkdir EFConsole
Navegando até a pasta do projeto:
cd EFConsole
Para este tutorial, estaremos usando uma aplicação console simples.
Para isto, rode o comando:
dotnet new console
Abra o projeto com seu editor favorito, eu estarei usando o Visual Studio code.
code .
Iniciando a Base de Dados
Para o bando de dados estaremos utilizando o Microsoft SQLServer dentro de um container docker.
Na raiz do projeto, crie um arquivo chamado docker-compose.yml:
version: "3"
services:
db:
image: microsoft/mssql-server-linux:latest
container_name: db
restart: "always"
ports:
- "1433:1433"
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=sa@12345
Vamos iniciar o banco usando o comando:
docker-compose up -d
Com o docker iniciado, abra o Azure Data Studio e conecte com o Server=localhost, User name=sa e senha sa@12345:
Codigo e Dependências
Para trabalhar com EF Core, devemos ter 4 dependências instaladas:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools --version 3.1.1
dotnet tool install --global dotnet-ef
Codigo
Com as dependencias instaladas, vamos ao codigo, a primeira classe que iremos desenvolver é a Entidade Pessoa, onde terá os atributos (id, nome e idade):
Models/Pessoa.cs
namespace EFConsole
{
public class Pessoa
{
public int id { get; set; }
public string nome { get; set; }
public int idade { get; set; }
}
}
Para a manipulação de dados, vamos criar um arquivo chamado MSSQLContext, onde através dessa classe iremos realizar o processo de Migration:
using Microsoft.EntityFrameworkCore;
namespace EFConsole {
public class MSSQLContext : DbContext
{
public DbSet<Pessoa> Pessoa { get; set; }
// Método de configuração
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// String de conexão
optionsBuilder
.UseSqlServer(@"Server=localhost;Database=dbmodel;User Id=sa;Password=sa@12345;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Pessoa>(p => {
// Tabela
p.ToTable("pessoa");
p
.Property(v => v.nome)
.HasColumnType("varchar(50)");
// Chave Primaria
p.HasKey(k => k.id);
});
}
}
}
dotnet ef migrations add Pessoa
dotnet ef database update
Ao realizar a migration, será criado uma tabela chamada "Pessoa", com os campos (id, nome e idade), para consultar no Azure Data Studio, execute o seguinte comando SQL:
USE dbmodel
GO
SELECT * FROM pessoa
Após isto, se as colunas forem listadas, vamos criar os metodos de CRUD.
Cadastrando uma Pessoa
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace EFConsole
{
public class Program
{
// Instancia Context
MSSQLContext db = new MSSQLContext();
// Context da Entidade Pessoa
DbSet<Pessoa> pessoaCtx;
public Program()
{
pessoaCtx = db.Set<Pessoa>();
}
static void Main(string[] args)
{
var p = new Program();
/// Cadastrar Pessoa
p.CadastrarPessoa(new Pessoa {
nome = "Rafael",
idade = 22
});
}
// Metodo de cadastro de Pessoa
public Pessoa CadastrarPessoa (Pessoa p)
{
pessoaCtx.AddAsync(p);
db.SaveChanges();
return p;
}
}
}
Consultando uma lista de pessoas
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace EFConsole
{
public class Program
{
// Instancia Context
MSSQLContext db = new MSSQLContext();
// Context da Entidade Pessoa
DbSet<Pessoa> pessoaCtx;
public Program()
{
pessoaCtx = db.Set<Pessoa>();
}
static void Main(string[] args)
{
var p = new Program();
.
.
.
/// Consultar Pessoas
var pessoas = p.ConsultarPessoa(new Pessoa {
nome = "Rafael",
idade = 22
});
pessoas.ToList().ForEach((el) => {
Console.WriteLine($"Id: {el.id}, Nome: {el.nome}, Idade: {el.idade}");
});
.
.
.
}
// Metodo de consulta de Pessoas
public IEnumerable<Pessoa> ConsultarPessoa (Pessoa p)
{
var res = pessoaCtx.ToList();
return res;
}
}
}
Editar uma pessoa
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace EFConsole
{
public class Program
{
// Instancia Context
MSSQLContext db = new MSSQLContext();
// Context da Entidade Pessoa
DbSet<Pessoa> pessoaCtx;
public Program()
{
pessoaCtx = db.Set<Pessoa>();
}
static void Main(string[] args)
{
var p = new Program();
.
.
.
/// Consultar Pessoas
p.EditarPessoa(new Pessoa {
id = 1,
nome = "Rafael Dias",
idade = 22
});
.
.
.
}
.
.
.
// Metodo de edição de Pessoas
public Pessoa EditarPessoa (Pessoa p)
{
pessoaCtx.Update(p);
db.SaveChanges();
return p;
}
}
}
Deletar uma pessoa
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace EFConsole
{
public class Program
{
// Instancia Context
MSSQLContext db = new MSSQLContext();
// Context da Entidade Pessoa
DbSet<Pessoa> pessoaCtx;
public Program()
{
pessoaCtx = db.Set<Pessoa>();
}
static void Main(string[] args)
{
var p = new Program();
.
.
.
/// Deletar Pessoa
p.DeletarPessoa(new Pessoa {
id = 1
});
.
.
.
}
.
.
.
// Metodo de deleção de Pessoas
public Pessoa DeletarPessoa (Pessoa p)
{
pessoaCtx.RemoveRange(p);
db.SaveChanges();
return p;
}
}
}
A classe Program.cs fica assim:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace EFConsole
{
public class Program
{
MSSQLContext db = new MSSQLContext();
DbSet<Pessoa> pessoaCtx;
public Program()
{
pessoaCtx = db.Set<Pessoa>();
}
static void Main(string[] args)
{
var p = new Program();
/// Cadastrar Pessoa
p.CadastrarPessoa(new Pessoa {
nome = "Rafael",
idade = 22
});
/// Consultar Pessoa
var pessoas = p.ConsultarPessoa(new Pessoa {
nome = "Rafael",
idade = 22
});
pessoas.ToList().ForEach((el) => {
Console.WriteLine($"Id: {el.id}, Nome: {el.nome}, Idade: {el.idade}");
});
/// Editar Pessoa
p.EditarPessoa(new Pessoa {
id = 1,
nome = "Rafael Dias",
idade = 22
});
/// Excluir Pessoa
p.DeletarPessoa(new Pessoa {
id = 1
});
}
public Pessoa CadastrarPessoa (Pessoa p)
{
pessoaCtx.AddAsync(p);
db.SaveChanges();
return p;
}
public Pessoa DeletarPessoa (Pessoa p)
{
pessoaCtx.RemoveRange(p);
db.SaveChanges();
return p;
}
public IEnumerable<Pessoa> ConsultarPessoa (Pessoa p)
{
var res = pessoaCtx.ToList();
return res;
}
public Pessoa EditarPessoa (Pessoa p)
{
pessoaCtx.Update(p);
db.SaveChanges();
return p;
}
}
}
Para realizar os testes, basta descomentar as chamadas dos metodos.
Posted on January 26, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.