Consulta de múltiplas tabelas com JOIN

O método Dapper Query<T1,T2,TReturn>() implementa o mapeamento de junção de tabelas um‑para‑um

  1. Explicação da sintaxe: Query<EntidadePrincipal,EntidadeRelacionada,EntidadeRetorno>(sql, delegado de mapeamento, parâmetros)
  2. Delegado de mapeamento: recebe as duas entidades retornadas pela consulta, atribui manualmente as propriedades relacionadas e devolve a entidade principal
  3. Regras SQL: consultas com JOIN exigem a listagem explícita das colunas. Use aliases distintos para tabelas a fim de evitar conflitos de colunas com nomes iguais
  4. Modelagem: adicione propriedades com entidades filhas dentro da entidade principal para criar objetos aninhados (Book contém um objeto Customer)

Exemplo

1. Definição das classes de entidade
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 aninhado: um livro pertence a exatamente um cliente (um‑para‑um)
    public Customers Customer { get; set; }
}Code language: C# (cs)
2. Lógica da 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) =>
                {
                    // Atribuição manual do objeto aninhado
                    book.Customer = custom;
                    return book;
                },
                new { id = 1 }
            );
        }
        Console.ReadKey();
    }
}Code language: C# (cs)

Atenção: Genérico Query<Book, Customers, Book>

  • 1.º: tipo de mapeamento da primeira tabela Book
  • 2.º: tipo de mapeamento da segunda tabela Customers
  • 3.º: tipo final de dado retornado Book

Consulta de múltiplas tabelas com JOIN

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *