Consulta de unión de múltiples tablas con JOIN

El método Dapper Query<T1,T2,TReturn>() implementa el mapeo de unión de tablas uno a uno

  1. Explicación de sintaxis: Query<EntidadPrincipal,EntidadRelacionada,EntidadDevuelta>(sql, delegado de mapeo, parámetros)
  2. Delegado de mapeo: recibe las dos entidades obtenidas en la consulta, asigna manualmente las propiedades relacionadas y devuelve la entidad principal
  3. Normativa SQL: las consultas JOIN requieren listar columnas de forma explícita. Se recomienda usar alias de tabla diferenciados para evitar conflictos con columnas de igual nombre
  4. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *