Dica: Pressione ESC para fechar

Tutoriais

Entity Framework Core: Do Básico ao Avançado

admin@codetotal.net
21/01/2026 20:27
1864 visualizações
3 min de leitura
Entity Framework Core: Do Básico ao Avançado
Resumo: Aprenda a usar o Entity Framework Core, o ORM mais popular do ecossistema .NET, desde conceitos básicos até técnicas avançadas.

O que é Entity Framework Core?

Entity Framework Core (EF Core) é um ORM (Object-Relational Mapper) moderno que permite trabalhar com bancos de dados usando objetos .NET.

Instalação

dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools

Criando seu DbContext

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    
    public DbSet<Product> Products { get; set; }
    public DbSet<Category> Categories { get; set; }
}

Configuração no Program.cs

builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(
        builder.Configuration.GetConnectionString("DefaultConnection")));

Migrations

Migrations permitem versionar o schema do banco de dados:

dotnet ef migrations add InitialCreate
dotnet ef database update

Operações CRUD

Create (Criar)

var product = new Product { Name = "Notebook", Price = 3500 };
_context.Products.Add(product);
await _context.SaveChangesAsync();

Read (Ler)

var products = await _context.Products.ToListAsync();
var product = await _context.Products.FindAsync(id);
var filtered = await _context.Products
    .Where(p => p.Price > 1000)
    .ToListAsync();

Update (Atualizar)

product.Price = 3200;
_context.Update(product);
await _context.SaveChangesAsync();

Delete (Deletar)

_context.Products.Remove(product);
await _context.SaveChangesAsync();

Relacionamentos

// One-to-Many
public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Product> Products { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

Eager Loading vs Lazy Loading

// Eager Loading - Carrega relacionamentos
var products = await _context.Products
    .Include(p => p.Category)
    .ToListAsync();

// Lazy Loading - Carrega sob demanda (requer configuração)

Performance: AsNoTracking

Use para operações read-only:

var products = await _context.Products
    .AsNoTracking()
    .ToListAsync();

Boas Práticas

  • Use async/await sempre que possível
  • Implemente o padrão Repository para desacoplar
  • Use AsNoTracking para queries read-only
  • Evite consultas N+1 com Include
  • Configure índices para colunas frequentemente consultadas

Gostou deste artigo?

Considere fazer uma contribuição para apoiar a criação de mais conteúdo como este.

Total recebido: R$ 0.00
Ver Todos os Artigos

Explore nossa coleção completa de artigos e tutoriais

Voltar para Artigos