ORM para C# (.NET): comparación de Entity Framework, Dapper y LINQ to SQL

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 y ejemplos



En el desarrollo moderno en la plataforma .NET, el trabajo con bases de datos rara vez prescinde del uso de Object-Relational Mapping (ORM). Las bibliotecas ORM permiten a los desarrolladores interactuar con bases de datos relacionales a través de código orientado a objetos, evitando la necesidad de escribir consultas SQL complejas manualmente. En este artículo compararemos los tres ORM más populares para C#: Entity Framework Core, Dapper y LINQ to SQL, y también proporcionaremos ejemplos prácticos de uso.



1. Entity Framework Core (EF Core)



EF Core es un ORM moderno y multiplataforma de Microsoft, que es la evolución de Entity Framework 6. Soporta el trabajo con varios SGBD (SQL Server, PostgreSQL, SQLite, MySQL, etc.) y proporciona potentes capacidades para trabajar con datos.



Características principales:

  • Code First / Database First — se puede crear la base de datos basándose en el código o viceversa.
  • Consultas LINQ — las consultas se escriben en C# y EF Core las convierte a SQL.
  • Migraciones — gestión automática del esquema de la base de datos.
  • Carga diferida (Lazy Loading) — carga automática de datos relacionados.


Ejemplo de código (Code First):



using Microsoft.EntityFrameworkCore;using System.Collections.Generic;

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

public class AppDbContext : DbContext{ public DbSet<User> Users { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=.;Database=MyDb;Trusted_Connection=True;"); }}

// Usousing (var db = new AppDbContext()){ // Agregar usuario var user = new User { Name = "Iván", Email = "ivan@example.com" }; db.Users.Add(user); db.SaveChanges();

// Consulta mediante LINQ var users = db.Users.Where(u => u.Name.Contains("Iván")).ToList();}


Ventajas: Alto rendimiento, funcionalidad rica, soporte de migraciones, comunidad activa. Desventajas: Mayor consumo de memoria, complejidad al configurar consultas complejas.



2. Dapper



Dapper es un micro-ORM ligero creado por el equipo de Stack Overflow. No proporciona un mapeo completo, pero permite ejecutar consultas SQL directamente, mapeando automáticamente los resultados en objetos de C#.



Características principales:

  • Máximo rendimiento — Dapper es considerado uno de los ORM más rápidos para .NET.
  • SQL directo — escribes consultas en SQL puro.
  • Minimalismo — no hay migraciones, contextos ni configuraciones complejas.


Ejemplo de código:



using Dapper;using System.Data.SqlClient;using System.Linq;

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

// Usostring connectionString = "Server=.;Database=MyDb;Trusted_Connection=True;";using (var connection = new SqlConnection(connectionString)){ // Ejecutar consulta SQL var users = connection.Query<User>("SELECT * FROM Users WHERE Name = @Name", new { Name = "Iván" }).ToList();

// Ejecutar procedimiento almacenado var result = connection.Query<User>("GetUsers", commandType: System.Data.CommandType.StoredProcedure);}


Ventajas: Alta velocidad, simplicidad, consumo mínimo de recursos. Desventajas: Ausencia de migraciones, hay que escribir SQL manualmente, no hay carga automática de entidades relacionadas.



3. LINQ to SQL



Recommendations