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();
✅ Dapper
var sql = "SELECT * FROM Produtos";
var produtos = await connection.QueryAsync<Produto>(sql);
🔬 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();
🧠 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:
- 💻 Dev.to
- 📬 contato@dopme.io
Top comments (0)