JOIN 다중 테이블 연관 쿼리

Dapper Query<T1,T2,TReturn>()일대일 테이블 조인 매핑을 구현합니다

  1. 구문 설명:Query<주 엔티티,연관 엔티티,반환 엔티티>(sql, 매핑 델리게이트, 매개변수)
  2. 매핑 델리게이트: 쿼리 결과로 가져온 두 엔티티를 받아 연관 속성을 수동으로 할당한 뒤 주 엔티티를 반환합니다
  3. SQL 규칙: JOIN 쿼리에서는 컬럼을 명시적으로 나열해야 합니다. 테이블 별칭을 구분하여 동일한 이름의 컬럼 충돌을 피하시기 바랍니다
  4. 모델 설계: 주 엔티티 안에 하위 엔티티 속성을 선언해 객체 중첩을 구현합니다(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 다중 테이블 연관 쿼리

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다