Requête de jointure multi‑tables avec JOIN

La méthode Dapper Query<T1,T2,TReturn>() réalise le mappage de jointure de table un‑à‑un

  1. Explication de la syntaxe : Query<EntitéPrincipale,EntitéLiée,EntitéRetour>(sql, délégué de mappage, paramètres)
  2. 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
  3. Règles SQL : les requêtes JOIN demandent de lister explicitement les colonnes. Utilisez des alias de table distincts pour éviter les conflits sur les colonnes de même nom
  4. 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *