Mehrtabellen‑Abfrage mit JOIN

Dapper Query<T1,T2,TReturn>() realisiert das Eins‑zu‑Eins‑Tabellen‑Join‑Mapping

  1. Syntax‑Beschreibung: Query<HauptEntität,ZugehörigeEntität,RückgabeEntität>(sql, Mapping‑Delegat, Parameter)
  2. Mapping‑Delegat: Nimmt die zwei abgefragten Entitäten entgegen, weist zugehörige Eigenschaften manuell zu und gibt anschließend die Hauptentität zurück
  3. SQL‑Hinweis: Bei JOIN‑Abfragen müssen Sie Spalten explizit auflisten. Nutzen Sie eindeutige Tabellenaliase, um Konflikte bei gleichnamigen Spalten zu vermeiden
  4. Modellaufbau: Legen Sie Eigenschaften für Unterentitäten innerhalb der Hauptentität an, um verschachtelte Objekte zu erstellen (Book enthält ein Customer‑Objekt)

Beispiel

1. Definition der Entitätsklassen
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; }
    // Verschachteltes zugehöriges Objekt: Ein Buch gehört genau einem Kunden (Eins‑zu‑Eins)
    public Customers Customer { get; set; }
}Code-Sprache: C# (cs)
2. Abfragelogik
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) =>
                {
                    // Manuelle Zuweisung des verschachtelten Objekts
                    book.Customer = custom;
                    return book;
                },
                new { id = 1 }
            );
        }
        Console.ReadKey();
    }
}Code-Sprache: C# (cs)

Hinweis: Generisch Query<Book, Customers, Book>

  • 1. Parameter: Mapping‑Typ der ersten Tabelle Book
  • 2. Parameter: Mapping‑Typ der zweiten Tabelle Customers
  • 3. Parameter: Der endgültige Rückgabetyp Book

Mehrtabellen‑Abfrage mit JOIN

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert