ORM para C# (.NET): comparação e exemplos de uso

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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:

Recommendations