Dapper Query<T1,T2,TReturn>() 實作一對一資料表關聯對應
- 語法說明:
Query<主實體,關聯實體,回傳實體>(sql, 對應委派, 參數) - 對應委派:接收查詢取得的兩個實體,手動設定關聯屬性,最後回傳主實體
- SQL 規範:
JOIN查詢務必明確指定欄位,建議設定不同資料表別名,避免同名欄位發生衝突 - 模型設計:於主實體內宣告子實體屬性,完成物件巢狀結構(Book 內包含 Customer)
範例
1. 實體類別定義
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; }
// 巢狀關聯物件:一本書對應一位客戶(一對一)
public Customers Customer { get; set; }
}Code language: C# (cs)
2. 查詢邏輯
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) =>
{
// 手動指定巢狀物件
book.Customer = custom;
return book;
},
new { id = 1 }
);
}
Console.ReadKey();
}
}Code language: C# (cs)
注意:泛型
Query<Book, Customers, Book>
- 第1個:第一張資料表對應型別 Book
- 第2個:第二張資料表對應型別 Customers
- 第3個:最終回傳的資料型別 Book
JOIN 多資料表關聯查詢
Previous: 多陳述式操作