我正在尝试使用Dapper返回一组共享以及一对多的ShareItems和ShareHistories的一对多集合。我的Dapper电话看起来像这样:
string sql =
@"select s.Id, s.UserId, s.Name, si.ShareId as Id, si.Name as ItemName
, sh.ShareId As Id, sh.DateShared, sh.SentTo
from Shares s
inner join ShareItems si on s.Id = si.ShareId
inner join ShareHistory sh on s.Id = sh.ShareId
where s.Id = @shareId";
return conn.Query<Share, List<ShareItem>, List<ShareHistory>, Share>(
sql,
(share, shareItems, history) =>
{
share.Items = shareItems;
share.History = history; return share;
},
new { shareId = shareId }).Single();
当我在SQL中运行查询时,我得到了我期望的扁平化数据。但是,当我通过Dapper运行代码时,Items和History集合将变回空白。我正在使用splitOn参数,但在阅读this question之后,我现在明白了什么是splitOn正在做什么(这对于在Dapper网站上的某个位置btw会很好),我想我正在处理那个部分。那么我做错了什么?
答案 0 :(得分:2)
我认为你不能从1行填充深度对象图。 (除非所有项目都在那一行)有一个类似的问题: Populating a list in a object with dapper
编辑:还有QueryMultiple
- 你可能想要检查一下。它允许返回多个结果集。然后,您可以映射您的实体。