精緻無限的多映射

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 ...");
}

這種限制有什麼辦法嗎?以前有人面對這個嗎?也許一些Dapper擴展?

一般承認的答案

目前,我所知道的唯一兩種方法是解決這個問題

  • 使用所需的字段創建POCO類,並像表一樣使用查詢
  • 修改Dapper的源代碼以允許更多映射。

熱門答案

2014年9月,該主題有一個合併的公關:

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
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow