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.
Top comments (0)