ORM para C# (.NET): Comparação entre Entity Framework, Dapper e NHibernate

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
Here is the translated HTML content in Portuguese (Português), with all HTML tags preserved and only the text content translated as requested. ```html

ORM para C# (.NET): Comparação entre Entity Framework Core, Dapper e NHibernate



Ao desenvolver aplicações em C# (.NET), a escolha do ORM (Object-Relational Mapping) correto pode impactar significativamente o desempenho, a velocidade de desenvolvimento e a manutenibilidade do código. Neste artigo, compararemos detalhadamente os três ORMs mais populares do ecossistema .NET: Entity Framework Core (EF Core), Dapper e NHibernate. Você conhecerá seus pontos fortes e fracos, além de ver exemplos concretos de código.



O que é ORM e para que serve?

ORM é uma tecnologia que permite trabalhar com bancos de dados através de objetos da linguagem de programação, em vez de consultas SQL diretas. Para C# (.NET), o ORM automatiza o mapeamento de tabelas em classes, a geração de SQL, o rastreamento de alterações e o gerenciamento de transações. Isso acelera o desenvolvimento, mas pode levar à perda de desempenho se usado incorretamente.



1. Entity Framework Core (EF Core)

EF Core é a versão moderna, leve e extensível do Entity Framework da Microsoft. É um ORM completo com um poderoso provedor LINQ, migrações automáticas e suporte a vários SGBDs (SQL Server, PostgreSQL, SQLite, MySQL, entre outros).



Vantagens:

  • Alta velocidade de desenvolvimento graças às abordagens Code-First e Database-First.
  • Sintaxe LINQ poderosa para escrever consultas.
  • Rastreamento automático de alterações (Change Tracker).
  • Suporte nativo a migrações.


Desvantagens:

  • Mais lento em comparação com micro-ORMs (devido à sobrecarga do rastreamento).
  • Dificuldades na otimização de consultas complexas (problema N+1).


Exemplo de código (EF Core):

// Modelopublic class User{    public int Id { get; set; }    public string Name { get; set; }    public string Email { get; set; }}

// Contexto do banco de dadospublic class AppDbContext : DbContext{ public DbSet<User> Users { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"Server=(localdb)\\mssqllocaldb;Database=MyDb;"); }}

// Usousing (var db = new AppDbContext()){ // Adição db.Users.Add(new User { Name = "Иван", Email = "ivan@example.com" }); db.SaveChanges(); // Consulta via LINQ var users = db.Users.Where(u => u.Name.StartsWith("И")).ToList(); // Exibição foreach (var user in users) { Console.WriteLine($"{user.Id}: {user.Name}"); }}


2. Dapper

Dapper é um micro-ORM criado pela equipe do Stack Overflow. Ele praticamente não adiciona sobrecarga e trabalha diretamente com ADO.NET. Dapper é ideal para projetos onde o desempenho e o controle total sobre o SQL são críticos.



Vantagens:

  • Máximo desempenho (próximo a consultas ADO.NET "puras").
  • Simplicidade e minimalismo (um único arquivo, alguns métodos de extensão).
  • Controle total sobre consultas SQL.
  • Fácil integração em projetos existentes.


Desvantagens:

  • Sem rastreamento de alterações (tudo manual).
  • Sem migrações automáticas.
  • Requer escrever consultas SQL manualmente.


Exemplo de código (Dapper):

public class User{    public int Id { get; set; }    public string Name { get; set; }    public string Email { get; set; }}

// Uso do Dapperusing (var connection = new SqlConnection(@"Server=(localdb)\\mssqllocaldb;Database=MyDb;")){ connection.Open(); // Inserção var sqlInsert = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)"; connection.Execute(sqlInsert, new { Name = "Петр", Email = "petr@example.com" }); // Consulta ```

Recommendations