El método Dapper Query<T1,T2,TReturn>() implementa el mapeo de unión de tablas uno a uno
- Explicación de sintaxis:
Query<EntidadPrincipal,EntidadRelacionada,EntidadDevuelta>(sql, delegado de mapeo, parámetros) - Delegado de mapeo: recibe las dos entidades obtenidas en la consulta, asigna manualmente las propiedades relacionadas y devuelve la entidad principal
- Normativa SQL: las consultas
JOINrequieren listar columnas de forma explícita. Se recomienda usar alias de tabla diferenciados para evitar conflictos con columnas de igual nombre - Diseño del modelo: declara propiedades de entidades secundarias dentro de la entidad principal para anidar objetos (Book contiene una instancia de Customer)
Ejemplo
1. Definición de clases de entidad
public class Customers
{
public int CustomerID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
public class Book
{
public int ID { get; set; }
public string Title { get; set; }
// Objeto relacionado anidado: un libro pertenece a un único cliente (uno a uno)
public Customers Customer { get; set; }
}Lenguaje del código: C# (cs)
2. Lógica de consulta
using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;
class Program
{
static void Main(string[] args)
{
var connStr = ConfigurationManager.ConnectionStrings["CustomerConnection"].ConnectionString;
using (IDbConnection connection = new MySqlConnection(connStr))
{
var sql = @"select b.*,c.CustomerID,c.FirstName,c.LastName,c.Email
from Customers as c
join Book as b
on c.CustomerID = b.CID
where b.ID = @id;";
var result = connection.Query<Book, Customers, Book>(
sql,
(book, custom) =>
{
// Asignación manual del objeto anidado
book.Customer = custom;
return book;
},
new { id = 1 }
);
}
Console.ReadKey();
}
}Lenguaje del código: C# (cs)
Nota: Genérico
Query<Book, Customers, Book>
- 1.º: tipo de mapeo de la primera tabla Book
- 2.º: tipo de mapeo de la segunda tabla Customers
- 3.º: tipo de dato final devuelto Book
Consulta de unión de múltiples tablas con JOIN
Previous: Operaciones de múltiples sentencias