ORM para C# (.NET): Comparación de Entity Framework, Dapper y NHibernate

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

ORM para C# (.NET): Comparación de Entity Framework Core, Dapper y NHibernate



Al desarrollar aplicaciones en C# (.NET), la elección del ORM (Object-Relational Mapping) correcto puede afectar significativamente el rendimiento, la velocidad de desarrollo y la mantenibilidad del código. En este artículo, compararemos en detalle los tres ORM más populares para el ecosistema .NET: Entity Framework Core (EF Core), Dapper y NHibernate. Conocerás sus fortalezas y debilidades, y también verás ejemplos concretos de código.



¿Qué es un ORM y para qué sirve?

ORM es una tecnología que permite trabajar con bases de datos a través de objetos del lenguaje de programación, en lugar de mediante consultas SQL directas. Para C# (.NET), el ORM automatiza el mapeo de tablas a clases, la generación de SQL, el seguimiento de cambios y la gestión de transacciones. Esto acelera el desarrollo, pero puede provocar una pérdida de rendimiento si se usa incorrectamente.



1. Entity Framework Core (EF Core)

EF Core es la versión moderna, ligera y extensible de Entity Framework de Microsoft. Es un ORM completo con un potente proveedor LINQ, migraciones automáticas y soporte para múltiples SGBD (SQL Server, PostgreSQL, SQLite, MySQL, etc.).



Ventajas:

  • Alta velocidad de desarrollo gracias a los enfoques Code-First y Database-First.
  • Potente sintaxis LINQ para escribir consultas.
  • Seguimiento automático de cambios (Change Tracker).
  • Soporte integrado para migraciones.


Desventajas:

  • Más lento en comparación con los micro-ORM (debido a la sobrecarga del seguimiento).
  • Dificultades para optimizar consultas complejas (problema N+1).


Ejemplo de código (EF Core):

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

// Contexto de base de datospublic 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()){ // Inserción db.Users.Add(new User { Name = "Iván", Email = "ivan@example.com" }); db.SaveChanges(); // Consulta mediante LINQ var users = db.Users.Where(u => u.Name.StartsWith("I")).ToList(); // Salida foreach (var user in users) { Console.WriteLine($"{user.Id}: {user.Name}"); }}


2. Dapper

Dapper es un micro-ORM creado por el equipo de Stack Overflow. Prácticamente no añade sobrecarga y trabaja directamente con ADO.NET. Dapper es ideal para proyectos donde el rendimiento y el control total sobre SQL son críticos.



Ventajas:

  • Máximo rendimiento (cercano a las consultas "puras" de ADO.NET).
  • Simplicidad y minimalismo (un solo archivo, unos pocos métodos de extensión).
  • Control total sobre las consultas SQL.
  • Fácil de integrar en proyectos existentes.


Desventajas:

  • No hay seguimiento de cambios (todo es manual).
  • No hay migraciones automáticas.
  • Requiere escribir consultas SQL manualmente.


Ejemplo de código (Dapper):

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

// Uso de Dapperusing (var connection = new SqlConnection(@"Server=(localdb)\\mssqllocaldb;Database=MyDb;")){ connection.Open(); // Inserción var sqlInsert = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)"; connection.Execute(sqlInsert, new { Name = "Pedro", Email = "pedro@example.com" }); // Consulta

Recommendations