Dapper Query<T1,T2,TReturn>() realisiert das Eins‑zu‑Eins‑Tabellen‑Join‑Mapping
- Syntax‑Beschreibung:
Query<HauptEntität,ZugehörigeEntität,RückgabeEntität>(sql, Mapping‑Delegat, Parameter) - Mapping‑Delegat: Nimmt die zwei abgefragten Entitäten entgegen, weist zugehörige Eigenschaften manuell zu und gibt anschließend die Hauptentität zurück
- SQL‑Hinweis: Bei
JOIN‑Abfragen müssen Sie Spalten explizit auflisten. Nutzen Sie eindeutige Tabellenaliase, um Konflikte bei gleichnamigen Spalten zu vermeiden - 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
Previous: Mehr‑Anweisungs‑Operationen