Dapper 무제한 멀티 매핑

c# dapper

문제

그래서 저는 7 개 이상의 엔티티에 가입 (그리고 매핑)해야하는 상황이 있습니다 (지금까지 보았던 Dapper의 현재 한계). 이것은 내가 지금까지 가지고있는 것이다 (의사 코드) :

using (var connection = new SqlConnection(_connectionString)) {
   IEnumerable<BigEntity> results = 
      connection.Query<BigEntity, Lookup1, Lookup2, ... around 10 of them>(sql, 
         (b, l1, l2, l3) => {
            // map and return here
         },
         splitOn: "split1, split2 ...");
}

이 제한을 둘러싼 방법이 있습니까? 누구든지 전에 이것을 직면 했습니까? 어쩌면 일부 대퍼 확장 기능이 있습니까?

수락 된 답변

현재이 문제를 해결하기 위해 내가 알고있는 유일한 두 가지 방법은

  • 원하는 필드로 POCO 클래스를 만들고 테이블과 같은 쿼리를 사용하십시오.
  • Dapper의 소스 코드를 수정하여 더 많은 매핑을 허용합니다.

인기 답변

2014 년 9 월부터이 주제에 대한 통합 된 PR이 있습니다.

https://github.com/StackExchange/Dapper/pull/158/files

PR은 유형의 배열을 전달할 수있는 메소드를 추가했습니다. 따라서 7 가지 엔티티에 대한 제한 사항은 더 이상 존재하지 않습니다.

Dapper Repo의 코드 테스트는 다음과 같은 새로운 방법 중 하나를 사용하는 방법을 보여줍니다.

public async Task TestMultiMapArbitraryWithSplitAsync()
    {
        const string sql = @"select 1 as id, 'abc' as name, 2 as id, 'def' as name";
        var productQuery = await connection.QueryAsync<Product>(sql, new[] { typeof(Product), typeof(Category) }, (objects) => {
            var prod = (Product)objects[0];
            prod.Category = (Category)objects[1];
            return prod;
        });

        var product = productQuery.First();
        // assertions
        product.Id.IsEqualTo(1);
        product.Name.IsEqualTo("abc");
        product.Category.Id.IsEqualTo(2);
        product.Category.Name.IsEqualTo("def");
    }


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