所以我有一种情况,我必须加入(并映射)超过7个实体(据我所知,这是Dapper的当前限制).这是我到目前为止(伪代码):
using (var connection = new SqlConnection(_connectionString)) { IEnumerableresults = connection.Query (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"); }