O método Dapper Query<T1,T2,TReturn>() implementa o mapeamento de junção de tabelas um‑para‑um
- Explicação da sintaxe:
Query<EntidadePrincipal,EntidadeRelacionada,EntidadeRetorno>(sql, delegado de mapeamento, parâmetros) - Delegado de mapeamento: recebe as duas entidades retornadas pela consulta, atribui manualmente as propriedades relacionadas e devolve a entidade principal
- Regras SQL: consultas com
JOINexigem a listagem explícita das colunas. Use aliases distintos para tabelas a fim de evitar conflitos de colunas com nomes iguais - 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
Previous: Operações com múltiplas instruções