Dapper에서 다중 매핑 지원을위한 열 이름 지정 방법

c# dapper

문제

var sql = @"SELECT
    a.id AS `Id`, 
    a.thing AS `Name`, 
    b.id AS `CategoryId`,
    b.something AS `CategoryName`  
FROM ..";

var products = connection.Query<Product, Category, Product>(sql,
    (product, category) =>
    {
        product.Category = category;
        return product;
    }, 
    splitOn: "CategoryId");

foreach(var p in products)
{
    System.Diagnostics.Debug.WriteLine("{0} (#{1}) in {2} (#{3})", p.Name, p.Id, p.Category.Name, p.Category.Id);
}

결과 :

'First (#1) in  (#0)'
'Second (#2) in  (#0)'

CategoryId 및 CategoryName에는 다음과 같은 값이 있습니다.

var products = connection.Query(sql).Select<dynamic, Product>(x => new Product
{
    Id = x.Id,
    Name = x.Name,
    Category = new Category { Id = x.CategoryId, Name = x.CategoryName }
});

결과 :

'First (#1) in My Category (#10)'
'Second (#2) in My Category (#10)'

MySQL 데이터베이스와 관련이 있다면 연결하고 있습니다.

수락 된 답변

가장 간단한 방법은 그것들을 모두 Id (대소 문자를 구별하지 않으므로 a.idb.id 만 괜찮습니다)라고 부르는 것입니다. 다음을 사용할 수 있습니다.

    public void TestMultiMapWithSplit()
    {
        var sql = @"select 1 as Id, 'abc' as Name, 2 as Id, 'def' as Name";
        var product = connection.Query<Product, Category, Product>(sql,
           (prod, cat) =>
           {
               prod.Category = cat;
               return prod;
           }).First();
        // assertions
        product.Id.IsEqualTo(1);
        product.Name.IsEqualTo("abc");
        product.Category.Id.IsEqualTo(2);
        product.Category.Name.IsEqualTo("def");
    }

그렇게 할 수 없다면 splitOn ( string ) 매개 변수 (선택 사항)가 있습니다.이 매개 변수는 쉼표로 구분 된 열 목록을 사용하여 분할시 처리합니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.