La méthode Dapper Query<T1,T2,TReturn>() réalise le mappage de jointure de table un‑à‑un
- Explication de la syntaxe :
Query<EntitéPrincipale,EntitéLiée,EntitéRetour>(sql, délégué de mappage, paramètres) - Délégué de mappage : il reçoit les deux entités issues de la requête, affecte manuellement les propriétés liées puis renvoie l’entité principale
- Règles SQL : les requêtes
JOINdemandent de lister explicitement les colonnes. Utilisez des alias de table distincts pour éviter les conflits sur les colonnes de même nom - Conception du modèle : ajoutez des propriétés d’entités filles au sein de l’entité principale pour obtenir l’imbrication d’objets (Book contient une instance de Customer)
Exemple
1. Définition des classes d’entités
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; }
// Objet lié imbriqué : un livre appartient à un seul client (un‑à‑un)
public Customers Customer { get; set; }
}Langage du code : C# (cs)
2. Logique de requête
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) =>
{
// Affectation manuelle de l'objet imbriqué
book.Customer = custom;
return book;
},
new { id = 1 }
);
}
Console.ReadKey();
}
}Langage du code : C# (cs)
Attention : générique
Query<Book, Customers, Book>
- 1ᵉʳ : type de mappage pour la première table Book
- 2ᵉ : type de mappage pour la seconde table Customers
- 3ᵉ : type de données renvoyé final Book
Requête de jointure multi‑tables avec JOIN
Previous: Opérations multi‑instructions