我有一个场景,我需要在 Dapper 中作为多地图查询的一部分返回单个列。
我简化了下面的示例,但实质上我要检索的单列值(int)不是Post类的属性(但在数据库表中)。
我想自己获取这个值,因为它的使用方式类似于示例中的以下行,其中status是有问题的int值:
post.SetSomeStatus(status);
以下是代码示例:
var sql =
@"select *, p.Status from #Posts p
left join #Users u on u.Id = p.OwnerId
Order by p.Id";
var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => {
post.Owner = user;
post.SetSomeStatus(status);
return post;
});
var post = data.First();
我在这段代码中看到以下错误:索引超出了数组的范围。
答案 0 :(得分:0)
错误的原因:索引超出了数组的范围是由于Dapper将查询响应的各个部分拆分为在返回参数上分配的方式Post,User &安培;在这个例子中是int。 Dapper的约定是拆分字段ID或提供您自己的规则以使用 splitOn 参数拆分结果集。
使上述示例有效:
var sql =
@"select *, p.Status AS ID from #Posts p
left join #Users u on u.Id = p.OwnerId
Order by p.Id";
var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => {
post.Owner = user;
post.SetSomeStatus(status);
return post;
});
var post = data.First();
我发现另一个问题也帮助了我:Correct use of Multimapping in Dapper