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:
También en la biblioteca
Generación de códigos QR en PHP: biblioteca phpqrcode y guía completa
Planificador de tareas Java: Quartz Scheduler — guía completa
Bibliotecas WebSocket de Rust: Tokio-tungstenite y async-tungstenite para tiempo real
CLI Framework para Rust: guía completa para el desarrollo de utilidades
KeychainAccess para Swift: guía completa con ejemplos