ORM para C# (.NET): visão geral, comparação e exemplos
Object-Relational Mapping (ORM) — é uma tecnologia que permite aos desenvolvedores trabalhar com bancos de dados através de código orientado a objetos, abstraindo-se de consultas SQL. No ecossistema .NET, existem várias bibliotecas ORM populares, cada uma com seus pontos fortes e fracos. Neste artigo, vamos analisar três ferramentas principais: Entity Framework Core, Dapper e NHibernate, comparar seu desempenho, facilidade de uso e fornecer exemplos práticos de código em C#.
1. Entity Framework Core (EF Core)
EF Core — é o ORM oficial da Microsoft, sucessor do Entity Framework 6. Ele suporta as abordagens Code First, Database First e Model First, além de fornecer um poderoso provedor LINQ para construção de consultas.
Vantagens:
- Alta abstração — mínimo de código SQL.
- Migrações automáticas e gerenciamento de esquema do banco de dados.
- Suporte a vários provedores (SQL Server, PostgreSQL, SQLite, MySQL).
- Integração profunda com ASP.NET Core.
Desvantagens:
- Desempenho reduzido em consultas complexas.
- Alto consumo de memória ao carregar dados relacionados.
Exemplo de código:
// Modelopublic class Product{ public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; }}
// Contextopublic class AppDbContext : DbContext{ public DbSet<Product> Products { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlServer("YourConnectionString");}
// Usousing var db = new AppDbContext();var cheapProducts = db.Products .Where(p => p.Price < 100) .OrderBy(p => p.Name) .ToList();2. Dapper
Dapper — é um micro-ORM leve, criado pela equipe do Stack Overflow. Ele estende IDbConnection com métodos de extensão e opera o mais próximo possível do ADO.NET, garantindo alto desempenho.
Vantagens:
- Extremamente rápido — quase como ADO.NET puro.
- Consumo mínimo de memória.
- Controle total sobre consultas SQL.
- Ideal para sistemas de alta carga.
Desvantagens:
- Sem geração automática de esquema de banco de dados.
- Necessidade de escrever consultas SQL manualmente.
- Ausência de Change Tracking (rastreamento de alterações).
Exemplo de código:
using (var connection = new SqlConnection("YourConnectionString")){ var products = connection.Query<Product>( "SELECT * FROM Products WHERE Price < @Price ORDER BY Name", new { Price = 100 }); // Múltiplos resultados using (var multi = connection.QueryMultiple("SELECT * FROM Products; SELECT * FROM Categories")) { var prods = multi.Read<Product>(); var cats = multi.Read<Category>(); }}3. NHibernate
NHibernate — é uma adaptação do popular framework Java Hibernate. Ele fornece uma implementação completa de uma abordagem semelhante ao JPA, com cache poderoso e suporte a hierarquias de herança complexas.
Vantagens:
- Sistema de cache avançado (primeiro e segundo níveis).
- Suporte a Lazy Loading, HQL (Hibernate Query Language).
- Configuração flexível de mapeamento via XML ou Fluent API.
- Bem adequado para projetos legados.
Desvantagens:
- Configuração complexa e alta curva de aprendizado.
- Mais lento que Dapper e EF Core em consultas simples.
- Atualizações menos frequentes em comparação com EF Core.
Exemplo de código:
Também na biblioteca
Cliente Elasticsearch para C# (.NET): NEST e Elastic.Clients.Elasticsearch
Validação de dados em Node.js com Joi: guia completo
Kingfisher para Swift: guia completo com exemplos
Trabalhando com CSV em TypeScript: bibliotecas, parsing e geração de dados