DEV Community

Cover image for Entity Framework ou Dapper ?
Danilo O. Pinheiro, dopme.io
Danilo O. Pinheiro, dopme.io

Posted on

Entity Framework ou Dapper ?

Neste artigo, vamos comparar Entity Framework Core e Dapper, abordando:

  • Conceitos
  • Performance
  • Produtividade
  • Casos de uso ideais
  • Código comparativo real
  • Benchmark
  • Boas práticas

🧠 O que é o Entity Framework Core?

O Entity Framework Core (EF Core) é o ORM (Object-Relational Mapper) oficial da Microsoft para .NET. Ele mapeia classes C# para tabelas do banco, permitindo escrever consultas LINQ em vez de SQL puro.

✨ Recursos do EF Core

  • ORM completo (CRUD + Migrations + Change Tracking)
  • LINQ para consultas
  • Suporte a relacionamentos, Lazy Loading, Cascade Delete
  • Migrations automatizadas
  • Suporte a vários bancos (SQL Server, PostgreSQL, MySQL, SQLite, etc)

⚡ O que é o Dapper?

O Dapper é um micro ORM criado pela equipe do Stack Overflow. Ele executa SQL puro, mas faz o mapeamento rápido de resultados para objetos C#. Extremamente leve e de altíssima performance.

✨ Recursos do Dapper

  • Mapeamento de SQL → Objetos
  • Suporte a stored procedures
  • Leve, sem tracking, sem migrations
  • Foco em performance e controle total
  • Pode ser usado junto com EF (complementar)

🔍 Comparativo rápido

Critério Entity Framework Core Dapper
Tipo ORM completo Micro ORM
Produtividade Alta (menos código) Média (mais SQL manual)
Performance Boa (com tracking) Excelente (sem tracking)
Migrations ✅ Suportado ❌ Não suportado
Tracking de Entidades ✅ Sim ❌ Não
LINQ ✅ Sim ❌ Não
SQL Manual Opcional Obrigatório
Curva de aprendizado Baixa Média (exige conhecimento SQL)
Controle total do SQL ❌ Limitado ✅ Total
Ideal para CRUDs, aplicações enterprise Microsserviços, leitura pesada

💻 Exemplo comparativo: Listar todos os produtos

✅ EF Core

var produtos = await _context.Produtos.ToListAsync();
Enter fullscreen mode Exit fullscreen mode

✅ Dapper

var sql = "SELECT * FROM Produtos";
var produtos = await connection.QueryAsync<Produto>(sql);
Enter fullscreen mode Exit fullscreen mode

🔬 Benchmark de Performance (consulta simples)

ORM Tempo médio (ms) Alocação de memória
Dapper ~5 ms Baixa
EF Core ~15–30 ms Média

Fonte: benchmarkdotnet.org + testes da comunidade


🎯 Quando usar Entity Framework Core?

✅ Você quer:

  • Criar rapidamente um CRUD
  • Usar LINQ para evitar SQL
  • Gerenciar Migrations e relacionamentos
  • Trabalhar com domínio rico (DDD)
  • Projetos onde produtividade é mais importante que micro desempenho

🚫 Evite EF Core se:

  • Cada milissegundo conta (ex: fintech, jogos, IoT)
  • Você precisa 100% de controle no SQL
  • Consultas muito complexas ou com joins altamente otimizados

🎯 Quando usar Dapper?

✅ Você quer:

  • Performance extrema (leitura massiva)
  • Consultas complexas altamente otimizadas
  • Integração com procedures e SQL raw
  • Controle total de indexes, joins, planos de execução

🚫 Evite Dapper se:

  • Você não quer escrever SQL
  • Precisa de abstrações ricas com tracking e migrations
  • Está em projetos muito grandes e colaborativos, com devs júnior

🧪 E se usar os dois?

Sim! Você pode usar EF Core para gravações (Insert/Update/Delete) e Dapper para consultas complexas e pesadas, como:

// Leitura otimizada com Dapper
var pedidoCompleto = await connection.QueryFirstAsync<PedidoCompleto>(sql);

// Persistência simples com EF Core
await _context.AddAsync(novoPedido);
await _context.SaveChangesAsync();
Enter fullscreen mode Exit fullscreen mode

🧠 Essa abordagem híbrida é comum em microsserviços, CQRS e DDD.


🔐 Boas práticas com ambos

Prática EF Core Dapper
Use AsNoTracking() Para consultas mais rápidas N/A (não há tracking)
Prefira QueryFirstAsync N/A Evita materializar listas grandes
Centralize SQL em arquivos Opcional ✅ Recomendado
Combine com CQRS/DDD ✅ Ideal ✅ Com leitura otimizada

📘 Conclusão

Não existe “o melhor” entre EF Core e Dapper. Existe a escolha certa para o seu contexto:

  • EF Core: Ideal para produtividade, desenvolvimento acelerado, APIs RESTful, CRUDs, sistemas internos.
  • Dapper: Ideal para performance, queries tunadas, integrações de leitura em tempo real, gateways.

📌 Regra de ouro:

EF Core para simplicidade. Dapper para performance e controle.


🤝 Conecte-se Comigo

Quer discutir arquitetura de APIs, acesso a dados ou práticas modernas com C# e .NET? Fico à disposição:

Top comments (0)