AYUDA .NET

Dapper C# (Cómo funciona para desarrolladores)

Actualizado 6 de junio, 2024
Compartir:

Introducción

En el desarrollo de software moderno, el acceso eficiente a las bases de datos es crucial para el rendimiento y la escalabilidad de las aplicaciones. Dapper un mapeador objeto-relacional ligero (ORM) para .NET, ofrece un enfoque racionalizado de la interacción con las bases de datos. En este artículo, exploraremos cómo utilizar Dapper C con un archivo de base de datos SQLite, demostrando su simplicidad y eficacia a través de ejemplos de código. Además, presentaré la extraordinaria biblioteca de generación de PDF llamada IronPDF de Iron Software.

¿Qué es Dapper?

Dapper es un mapeo objeto-relacional (ORM) para la plataforma .NET. Se trata de un sencillo mapeador de objetos que permite asignar un modelo de dominio orientado a objetos a una base de datos relacional tradicional. Dapper es conocido por su velocidad y rendimiento, y a menudo se le conoce como el "Rey de los Micro ORM". Iguala la velocidad de un lector de datos ADO.NET en bruto y mejora la interfaz IDbConnection con útiles métodos de extensión para consultar bases de datos SQL.

Características principales de Dapper

  1. Rendimiento: Dapper es conocido por su excelente rendimiento gracias a su diseño ligero y su eficiente mapeo de objetos.
  2. Simplicidad: La API de Dapper es minimalista e intuitiva, lo que facilita a los desarrolladores su comprensión y uso eficaz.
  3. Soporte de SQL sin procesar: Dapper permite a los desarrolladores escribir consultas SQL sin procesar, proporcionando un control total sobre las interacciones con la base de datos.
  4. Asignación de objetos: Dapper asigna los resultados de las consultas directamente a objetos C#, lo que reduce el código repetitivo y mejora la legibilidad del código.
  5. Consultas parametrizadas: Dapper soporta consultas parametrizadas, protegiendo contra ataques de inyección SQL y mejorando el rendimiento.
  6. Mapeo múltiple: Dapper maneja a la perfección relaciones de uno a muchos y de muchos a muchos, lo que permite ejecutar múltiples consultas de forma eficiente, simplificando así la recuperación de datos complejos.

Acceso asíncrono a datos con Dapper

Dapper ofrece métodos de extensión asíncronos que reflejan sus homólogos síncronos, lo que permite a los desarrolladores ejecutar consultas de bases de datos de forma asíncrona. Estos métodos asíncronos son ideales para operaciones de E/S, como las consultas a bases de datos, en las que el subproceso principal puede seguir ejecutando otras tareas mientras espera a que se complete la operación de la base de datos.

Métodos asíncronos clave en Dapper

  1. QueryAsync: Ejecuta una consulta SQL de forma asíncrona y devuelve el resultado como una secuencia de objetos dinámicos u objetos fuertemente tipados.
  2. QueryFirstOrDefaultAsync: Ejecuta una consulta SQL de forma asíncrona y devuelve el primer resultado o un valor predeterminado si no se encuentra ningún resultado.
  3. ExecuteAsync: Ejecuta un comando SQL de forma asíncrona (por ejemplo, INSERT, UPDATE, DELETE) y devuelve el número de filas afectadas.

    Configuración del entorno: Antes de sumergirte en los ejemplos de código, asegúrate de tener instaladas las herramientas necesarias:

  4. Visual Studio o Visual Studio Code.
  5. .NET SDK.
  6. Paquete SQLite para .NET.

    Para instalar el paquete SQLite, ejecute el siguiente comando en el directorio de su proyecto:

dotnet add package Microsoft.Data.Sqlite

Creación de una base de datos SQLite: Para fines de demostración, vamos a crear un archivo de base de datos SQLite simple llamado "ejemplo.db" con una tabla "Usuarios" que contiene columnas para "Id," "Nombre," y "Email."

CREATE TABLE Users (
    Id INTEGER PRIMARY KEY,
    Name TEXT,
    Email TEXT
);
CREATE TABLE Users (
    Id INTEGER PRIMARY KEY,
    Name TEXT,
    Email TEXT
);
CREATE TABLE Users(Id [INTEGER] PRIMARY KEY, Name TEXT, Email TEXT)
VB   C#

Utilización de Dapper con SQLite

  1. En primer lugar, asegúrese de que ha importado los espacios de nombres necesarios:
using Microsoft.Data.Sqlite;
using Dapper;
using Microsoft.Data.Sqlite;
using Dapper;
Imports Microsoft.Data.Sqlite
Imports Dapper
VB   C#
  1. Establecer una conexión con la base de datos SQLite:
    string connectionString = "Data Source=example.db"; //  Base de datos SQLite 
    connection string
    using (var connection = new SqliteConnection(connectionString))
    {
        connection.Open();
        //  Sus consultas sobre Dapper irán aquí
    }
    string connectionString = "Data Source=example.db"; //  Base de datos SQLite 
    connection string
    using (var connection = new SqliteConnection(connectionString))
    {
        connection.Open();
        //  Sus consultas sobre Dapper irán aquí
    }
Private connectionString As String = "Data Source=example.db" '  Base de datos SQLite
	connection Function using(Optional ByVal connection = New SqliteConnection(connectionString)) As String
		connection.Open()
		'  Sus consultas sobre Dapper irán aquí
	End Function
VB   C#
  1. Ejecutar una consulta con Dapper:
    //  Definir una clase para representar la estructura de un usuario
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
    //  Consulta para seleccionar todos los usuarios o el valor por defecto
    string query = "SELECT * FROM Users"; //  var consultas sql
    var users = connection.Query<User>(query).ToList();
    //  Mostrar los resultados
    foreach (var user in users)
    {
        Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Email: {user.Email}");
    }
    //  Definir una clase para representar la estructura de un usuario
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
    //  Consulta para seleccionar todos los usuarios o el valor por defecto
    string query = "SELECT * FROM Users"; //  var consultas sql
    var users = connection.Query<User>(query).ToList();
    //  Mostrar los resultados
    foreach (var user in users)
    {
        Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Email: {user.Email}");
    }
'  Definir una clase para representar la estructura de un usuario
	Public Class User
		Public Property Id() As Integer
		Public Property Name() As String
		Public Property Email() As String
	End Class
	'  Consulta para seleccionar todos los usuarios o el valor por defecto
	Private query As String = "SELECT * FROM Users" '  var consultas sql
	Private users = connection.Query(Of User)(query).ToList()
	'  Mostrar los resultados
	For Each user In users
		Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Email: {user.Email}")
	Next user
VB   C#
  1. Insertar datos en la base de datos utilizando Dapper:
    //  Definir un nuevo usuario 
    var newUser = new User { Name = "John Doe", Email = "john@example.com" };
    //  consulta SQL generada por el usuario/procedimiento almacenado para insertar un nuevo usuario
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    //  Ejecutar la consulta
    connection.Execute(insertQuery, newUser);
    //  Definir un nuevo usuario 
    var newUser = new User { Name = "John Doe", Email = "john@example.com" };
    //  consulta SQL generada por el usuario/procedimiento almacenado para insertar un nuevo usuario
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    //  Ejecutar la consulta
    connection.Execute(insertQuery, newUser);
'  Definir un nuevo usuario 
	Dim newUser = New User With {
		.Name = "John Doe",
		.Email = "john@example.com"
	}
	'  consulta SQL generada por el usuario/procedimiento almacenado para insertar un nuevo usuario
	Dim insertQuery As String = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)"
	'  Ejecutar la consulta
	connection.Execute(insertQuery, newUser)
VB   C#

Presentación de IronPDF

IronPDF es una biblioteca C# de Iron Software que permite a los desarrolladores crear, editar y manipular documentos PDF mediante programación dentro de aplicaciones .NET. Ofrece funciones como generar documentos PDF a partir de HTML, imágenes y otros formatos, así como añadir texto, imágenes y diversos elementos a archivos PDF existentes. IronPDF pretende simplificar las tareas de generación y manipulación de PDF para desarrolladores .NET proporcionando un completo conjunto de herramientas y API.

IronPDF ofrece una serie de funciones para la generación y manipulación de PDF dentro de aplicaciones .NET:

  1. Conversión de HTML a PDF: Convierte contenido HTML, incluidos estilos CSS, en documentos PDF.
  2. Conversión de imágenes a PDF: Convierte imágenes (como JPEG, PNG, BMP) a documentos PDF.
  3. Conversión de texto a PDF: Convierte texto sin formato o con formato (RTF) a documentos PDF.
  4. Generación de PDF: Cree documentos PDF desde cero mediante programación.
  5. Edición de PDF: Edite documentos PDF existentes añadiendo o modificando texto, imágenes y otros elementos.
  6. Fusión y división de PDF: Combine varios documentos PDF en un único documento o divida un documento PDF en varios archivos.
  7. Seguridad PDF: Aplique protección por contraseña y cifrado a los documentos PDF para restringir el acceso y proteger la información confidencial.
  8. Relleno de formularios PDF: Rellene formularios PDF con datos mediante programación.
  9. Impresión PDF: Imprima documentos PDF directamente desde su aplicación .NET.
  10. Ajustes de conversión de PDF: Personalice varios ajustes como el tamaño de página, la orientación, los márgenes, la compresión y mucho más durante la generación de PDF.
  11. Extracción de texto PDF: Extraiga contenido de texto de documentos PDF para su posterior procesamiento o análisis.
  12. Metadatos PDF: Establecer metadatos (autor, título, tema, palabras clave) para documentos PDF.

Generación de documentos PDF con IronPDF y Dapper

Crear una aplicación de consola en Visual Studio

Dapper C# (Cómo funciona para desarrolladores): Figura 1 - Creación de una aplicación de consola en Visual Studio

Indique el nombre y la ubicación del proyecto

Dapper C# (Cómo funciona para los desarrolladores): Figura 2 - Nombrar el proyecto

Seleccione la versión .NET

Dapper C# (Cómo funciona para desarrolladores): Figura 3 - Seleccione la versión .NET deseada

Instale los siguientes paquetes desde el gestor de paquetes de Visual Studio o desde la consola

dotnet add package Microsoft.Data.Sqlite

Dapper C# (Cómo funciona para desarrolladores): Figura 4 - Instalación de Microsoft Data Sqlite desde el gestor de paquetes de Visual Studio

dotnet add package Dapper --version 2.1.35

Dapper C# (Cómo funciona para desarrolladores): Figura 5 - Instalación de Dapper desde el gestor de paquetes de Visual Studio

dotnet add package IronPdf --version 2024.4.2
dotnet add package IronPdf --version 2024.4.2
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'dotnet add package IronPdf --version 2024.4.2
VB   C#

Dapper C# (Cómo funciona para desarrolladores): Figura 6 - Instalación de IronPDF desde el gestor de paquetes de Visual Studio

Utilice el siguiente código para generar un documento PDF

using Dapper;
using IronPdf;
using Microsoft.Data.Sqlite;
string connectionString = "Data Source=ironPdf.db"; //  cadena de conexión a base de datos sql server
var content = "<h1>Demonstrate IronPDF with Dapper</h1>";
content += "<h2>Create a new database using Microsoft.Data.Sqlite</h2>";
content += "<p>new SqliteConnection(connectionString) and connection.Open()</p>";
using (var connection = new SqliteConnection(connectionString))
{
    connection.Open();
    content += "<h2>Create a Users Table using dapper and insert sql query</h2>";
    content += "<p>CREATE TABLE IF NOT EXISTS Users</p>";
    //  crear tabla
    string sql = "CREATE TABLE IF NOT EXISTS Users (\n    Id INTEGER PRIMARY KEY,\n    Name TEXT,\n    Email TEXT\n);";
    connection.Execute(sql);
    content += "<h2>Add Users to table using Dapper</h2>";
    content += AddUser(connection, new User { Name = "John Doe", Email = "john@example.com" });
    content += AddUser(connection, new User { Name = "Smith William", Email = "Smith@example.com" });
    content += AddUser(connection, new User { Name = "Rock Bill", Email = "Rock@example.com" });
    content += AddUser(connection, new User { Name = "Jack Sparrow", Email = "Jack@example.com" });
    content += AddUser(connection, new User { Name = "Tomus Tibe", Email = "Tomus@example.com" });
    content += "<h2>Get Users From table using Dapper</h2>";
    //  Consulta para seleccionar todos los usuarios o el valor por defecto
    string query = "SELECT * FROM Users"; //  var consultas sql
    var users = connection.Query<User>(query).ToList();
    foreach (var user in users)
    {
        content += $"<p>Id:{user.Id}, Name:{user.Name}, email: {user.Email}</p>";
        Console.WriteLine($"{user.Id}. User Name:{user.Name}, Email:{user.Email}");
    }
    //  Crear renderizador
    var renderer = new ChromePdfRenderer();
    //  Crear un PDF a partir de una cadena HTML
    var pdf = renderer.RenderHtmlAsPdf(content);
    //  Guardar en un archivo o Stream
    pdf.SaveAs("dapper.pdf");
}
string AddUser(SqliteConnection sqliteConnection, User user)
{
    //  consulta SQL generada por el usuario/procedimiento almacenado para insertar un nuevo usuario
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    //  Ejecutar la consulta
    sqliteConnection.Execute(insertQuery, user);
    return $"<p>Name:{user.Name}, email: {user.Email}</p>"; 
}
using Dapper;
using IronPdf;
using Microsoft.Data.Sqlite;
string connectionString = "Data Source=ironPdf.db"; //  cadena de conexión a base de datos sql server
var content = "<h1>Demonstrate IronPDF with Dapper</h1>";
content += "<h2>Create a new database using Microsoft.Data.Sqlite</h2>";
content += "<p>new SqliteConnection(connectionString) and connection.Open()</p>";
using (var connection = new SqliteConnection(connectionString))
{
    connection.Open();
    content += "<h2>Create a Users Table using dapper and insert sql query</h2>";
    content += "<p>CREATE TABLE IF NOT EXISTS Users</p>";
    //  crear tabla
    string sql = "CREATE TABLE IF NOT EXISTS Users (\n    Id INTEGER PRIMARY KEY,\n    Name TEXT,\n    Email TEXT\n);";
    connection.Execute(sql);
    content += "<h2>Add Users to table using Dapper</h2>";
    content += AddUser(connection, new User { Name = "John Doe", Email = "john@example.com" });
    content += AddUser(connection, new User { Name = "Smith William", Email = "Smith@example.com" });
    content += AddUser(connection, new User { Name = "Rock Bill", Email = "Rock@example.com" });
    content += AddUser(connection, new User { Name = "Jack Sparrow", Email = "Jack@example.com" });
    content += AddUser(connection, new User { Name = "Tomus Tibe", Email = "Tomus@example.com" });
    content += "<h2>Get Users From table using Dapper</h2>";
    //  Consulta para seleccionar todos los usuarios o el valor por defecto
    string query = "SELECT * FROM Users"; //  var consultas sql
    var users = connection.Query<User>(query).ToList();
    foreach (var user in users)
    {
        content += $"<p>Id:{user.Id}, Name:{user.Name}, email: {user.Email}</p>";
        Console.WriteLine($"{user.Id}. User Name:{user.Name}, Email:{user.Email}");
    }
    //  Crear renderizador
    var renderer = new ChromePdfRenderer();
    //  Crear un PDF a partir de una cadena HTML
    var pdf = renderer.RenderHtmlAsPdf(content);
    //  Guardar en un archivo o Stream
    pdf.SaveAs("dapper.pdf");
}
string AddUser(SqliteConnection sqliteConnection, User user)
{
    //  consulta SQL generada por el usuario/procedimiento almacenado para insertar un nuevo usuario
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    //  Ejecutar la consulta
    sqliteConnection.Execute(insertQuery, user);
    return $"<p>Name:{user.Name}, email: {user.Email}</p>"; 
}
Imports Microsoft.VisualBasic
Imports Dapper
Imports IronPdf
Imports Microsoft.Data.Sqlite
Private connectionString As String = "Data Source=ironPdf.db" '  cadena de conexión a base de datos sql server
Private content = "<h1>Demonstrate IronPDF with Dapper</h1>"
Private content &= "<h2>Create a new database using Microsoft.Data.Sqlite</h2>"
Private content &= "<p>new SqliteConnection(connectionString) and connection.Open()</p>"
Using connection = New SqliteConnection(connectionString)
	connection.Open()
	content &= "<h2>Create a Users Table using dapper and insert sql query</h2>"
	content &= "<p>CREATE TABLE IF NOT EXISTS Users</p>"
	'  crear tabla
	Dim sql As String = "CREATE TABLE IF NOT EXISTS Users (" & vbLf & "    Id INTEGER PRIMARY KEY," & vbLf & "    Name TEXT," & vbLf & "    Email TEXT" & vbLf & ");"
	connection.Execute(sql)
	content &= "<h2>Add Users to table using Dapper</h2>"
	content += AddUser(connection, New User With {
		.Name = "John Doe",
		.Email = "john@example.com"
	})
	content += AddUser(connection, New User With {
		.Name = "Smith William",
		.Email = "Smith@example.com"
	})
	content += AddUser(connection, New User With {
		.Name = "Rock Bill",
		.Email = "Rock@example.com"
	})
	content += AddUser(connection, New User With {
		.Name = "Jack Sparrow",
		.Email = "Jack@example.com"
	})
	content += AddUser(connection, New User With {
		.Name = "Tomus Tibe",
		.Email = "Tomus@example.com"
	})
	content &= "<h2>Get Users From table using Dapper</h2>"
	'  Consulta para seleccionar todos los usuarios o el valor por defecto
	Dim query As String = "SELECT * FROM Users" '  var consultas sql
	Dim users = connection.Query(Of User)(query).ToList()
	For Each user In users
		content += $"<p>Id:{user.Id}, Name:{user.Name}, email: {user.Email}</p>"
		Console.WriteLine($"{user.Id}. User Name:{user.Name}, Email:{user.Email}")
	Next user
	'  Crear renderizador
	Dim renderer = New ChromePdfRenderer()
	'  Crear un PDF a partir de una cadena HTML
	Dim pdf = renderer.RenderHtmlAsPdf(content)
	'  Guardar en un archivo o Stream
	pdf.SaveAs("dapper.pdf")
End Using
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'string AddUser(SqliteConnection sqliteConnection, User user)
'{
'	'  consulta SQL generada por el usuario/procedimiento almacenado para insertar un nuevo usuario
'	string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
'	'  Ejecutar la consulta
'	sqliteConnection.Execute(insertQuery, user);
'	Return string.Format("<p>Name:{0}, email: {1}</p>", user.Name, user.Email);
'}
VB   C#

Código Explicación

  1. Comience por crear un soporte de contenido de cadena para la generación de PDF
  2. Crear una nueva base de datos utilizando Microsoft.Data.Sqlite, connection.Open() creará una base de datos vacía
  3. Crear una Tabla de Usuarios usando Dapper e insertar una consulta SQL
  4. Añadir usuarios a la tabla utilizando Dapper con consultas de inserción
  5. Consulta para seleccionar todos los usuarios o el valor por defecto
  6. Guardar el contenido generado como PDF utilizando los métodos ChromePdfRenderer y SaveAs

Salida

Dapper C# (Cómo funciona para desarrolladores): Figura 7 - Ejemplo de salida PDF utilizando todos los paquetes instalados anteriormente

Licencia (versión de prueba disponible para IronPDF)

IronPDF.

Se puede obtener una licencia de prueba para desarrolladores aquí.

Por favor, sustituya la clave en el archivo appSettings.json que se muestra a continuación

{
  "IronPdf.License.LicenseKey" : "The Key Goes Here"
}
{
  "IronPdf.License.LicenseKey" : "The Key Goes Here"
}
If True Then
  "IronPdf.License.LicenseKey" : "The Key Goes Here"
End If
VB   C#

Conclusión

Dapper simplifica el acceso a los datos en las aplicaciones .NET y, combinado con SQLite, proporciona una solución ligera y eficaz para gestionar bases de datos. Siguiendo los pasos descritos en este artículo, puede aprovechar Dapper para interactuar con bases de datos SQLite sin problemas, lo que le permite crear aplicaciones robustas y escalables con facilidad. Junto con IronPDF, los desarrolladores pueden adquirir conocimientos relacionados con bases de datos ORM como Dapper y bibliotecas de generación de PDF como IronPDF.

< ANTERIOR
C# Pair Class (Cómo funciona para los desarrolladores)
SIGUIENTE >
Nswag C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,848,088 Ver licencias >
123