所以我有一种情况,我必须加入(并映射)超过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扩展可能吗?
答案 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");
}