ORM para C# (.NET): comparación y ejemplos de uso

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): resumen, comparación y ejemplos



Object-Relational Mapping (ORM) es una tecnología que permite a los desarrolladores trabajar con bases de datos a través de código orientado a objetos, abstrayéndose de las consultas SQL. En el ecosistema .NET existen varias bibliotecas ORM populares, cada una con sus fortalezas y debilidades. En este artículo revisaremos tres herramientas principales: Entity Framework Core, Dapper y NHibernate, compararemos su rendimiento, facilidad de uso y proporcionaremos ejemplos prácticos de código en C#.



1. Entity Framework Core (EF Core)

EF Core es el ORM oficial de Microsoft, sucesor de Entity Framework 6. Soporta los enfoques Code First, Database First y Model First, además de proporcionar un potente proveedor LINQ para construir consultas.



Ventajas:

  • Alta abstracción — mínimo código SQL.
  • Migraciones automáticas y gestión del esquema de la BD.
  • Soporte para múltiples proveedores (SQL Server, PostgreSQL, SQLite, MySQL).
  • Integración profunda con ASP.NET Core.


Desventajas:

  • Rendimiento reducido en consultas complejas.
  • Alto consumo de memoria al cargar datos relacionados.


Ejemplo 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 es un micro-ORM ligero, creado por el equipo de Stack Overflow. Extiende IDbConnection con métodos de extensión y funciona lo más cerca posible de ADO.NET, proporcionando un alto rendimiento.



Ventajas:

  • Extremadamente rápido — casi como ADO.NET puro.
  • Mínimo consumo de memoria.
  • Control total sobre las consultas SQL.
  • Adecuado para sistemas de alta carga.


Desventajas:

  • Sin generación automática del esquema de la BD.
  • Necesidad de escribir consultas SQL manualmente.
  • Ausencia de Change Tracking (seguimiento de cambios).


Ejemplo 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últiples 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 es un puerto del popular framework Java Hibernate. Proporciona una implementación completa del enfoque similar a JPA con potente almacenamiento en caché y soporte para jerarquías de herencia complejas.



Ventajas:

  • Sistema de caché avanzado (primer y segundo nivel).
  • Soporte para Lazy Loading, HQL (Hibernate Query Language).
  • Configuración flexible del mapeo mediante XML o Fluent API.
  • Muy adecuado para proyectos heredados.


Desventajas:

  • Configuración compleja y curva de aprendizaje pronunciada.
  • Más lento que Dapper y EF Core en consultas simples.
  • Se actualiza con poca frecuencia en comparación con EF Core.


Ejemplo de código:

Recommendations