Dapper para C# (.NET): guía completa con ejemplos

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

Introducción a Dapper: qué es y para qué sirve

\n\n

Dapper es una biblioteca ligera (Micro ORM) para la plataforma .NET, desarrollada por el equipo de Stack Overflow. Es una extensión para IDbConnection y está diseñada para ejecutar consultas SQL a bases de datos con una sobrecarga mínima. A diferencia de los ORM pesados (por ejemplo, Entity Framework Core), Dapper no rastrea cambios en objetos, no genera consultas SQL complejas ni requiere configuración de contexto de datos. Su objetivo principal es el máximo rendimiento y la simplicidad.

\n\n

Principales ventajas de Dapper:

\n
    \n
  • Velocidad: Dapper funciona casi a la velocidad de los comandos ADO.NET puros, ya que utiliza generación dinámica de código IL para el mapeo de resultados.
  • \n
  • Simplicidad: Mínimo código para ejecutar consultas. No es necesario crear configuraciones complejas.
  • \n
  • Control sobre SQL: Escribes las consultas SQL manualmente, lo que te da control total sobre qué datos y cómo se recuperan.
  • \n
  • Flexibilidad: Funciona con cualquier proveedor ADO.NET (SQL Server, PostgreSQL, MySQL, SQLite, etc.).
  • \n
  • Extensibilidad: Se integra fácilmente con proyectos existentes y otros ORM.
  • \n
\n\n

Dapper es ideal para proyectos donde el rendimiento y el control directo sobre SQL son importantes, así como para microservicios y aplicaciones de alta carga.

\n\n

Instalación de Dapper

\n\n

Dapper se distribuye a través de NuGet, el gestor de paquetes para .NET. Se puede instalar de varias maneras:

\n\n

A través de la consola del administrador de paquetes (Visual Studio):

\n
Install-Package Dapper
\n\n

A través de .NET CLI (método recomendado):

\n
dotnet add package Dapper
\n\n

A través de la interfaz de NuGet en Visual Studio:

\n
    \n
  1. Haz clic derecho en el proyecto → "Administrar paquetes NuGet".
  2. \n
  3. Ve a la pestaña "Examinar".
  4. \n
  5. Busca "Dapper" y haz clic en "Instalar".
  6. \n
\n\n

Después de la instalación, aparecerá una referencia al ensamblado Dapper.dll en el proyecto. No se requieren dependencias adicionales: la biblioteca funciona sobre el estándar System.Data.

\n\n

Inicio rápido con ejemplo de código

\n\n

Veamos un ejemplo mínimo de trabajo con Dapper. Supongamos que tenemos una tabla Users en una base de datos SQL Server:

\n\n
CREATE TABLE Users (\n    Id INT PRIMARY KEY IDENTITY,\n    Name NVARCHAR(100) NOT NULL,\n    Age INT NOT NULL\n);
\n\n

Código en C# para obtener todos los usuarios:

\n\n
using System.Data.SqlClient;\nusing Dapper;\n\npublic class User\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n    public int Age { get; set; }\n}\n\nclass Program\n{\n    static void Main()\n    {\n        string connectionString = "Server=localhost;Database=TestDB;Trusted_Connection=True;";\n        using (var connection = new SqlConnection(connectionString))\n        {\n            connection.Open();\n            \n            // Consulta SELECT simple\n            var users = connection.Query<User>("SELECT * FROM Users");\n            \n            foreach (var user in users)\n            {\n                Console.WriteLine($"{user.Id}: {user.Name}, {user.Age} años");\n            }\n        }\n    }\n}
\n\n

Como puedes ver, Dapper mapea automáticamente los resultados de la consulta SQL a objetos de C#. El método Query<T> es el método principal para ejecutar consultas SELECT.

\n\n

Métodos/funciones principales de Dapper

\n\n

Dapper proporciona un conjunto de métodos de extensión para la interfaz IDbConnection. Veamos 10 métodos clave.

\n\n

1. Query<T>

\n

Qué hace: Ejecuta una consulta SQL y devuelve una colección de objetos del tipo especificado T. Se utiliza para consultas SELECT que devuelven varias filas.

\n

Parámetros:

Recommendations