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>
- 첫 번째: 첫 번째 테이블 매핑 타입 Book
- 두 번째: 두 번째 테이블 매핑 타입 Customers
- 세 번째: 최종 반환 데이터 타입 Book
JOIN 다중 테이블 연관 쿼리
Previous: 다중 구문 작업