精致无限的多映射

时间:2013-12-04 03:21:32

标签: 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扩展可能吗?

1 个答案:

答案 0 :(得分:7)

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