枚举后Dapper返回结果失败

Posted

技术标签:

【中文标题】枚举后Dapper返回结果失败【英文标题】:Dapper return result fails after enumeration 【发布时间】:2013-12-27 21:10:06 【问题描述】:

我有一个小巧的查询多个函数,它输出许多不同的列表,除了第一个列表。在调试时,我发现当代码到达 Dapper 中的以下行时,结果消失了:

public IEnumerable<T> Read<T>....
    var result = ReadDeferred<T>(gridIndex, deserializer.Func, typedIdentity); //result has correct db values here
    return buffered ? result.ToList() : result; //result = Enumeration yielded no results

ReadDeferred 函数不处理 try 或 finally 子句中的任何代码。为什么在枚举中会丢失结果的值?

这是我调用 dapper 的代码:

var results = con.QueryMultiple("GetInspections", p, commandType: CommandType.StoredProcedure, commandTimeout: 5000);
var inspectionDetails = new Inspection

    InspectionDetailList = results.Read<Inspection>().ToList(), <-- this one does not popuplate
    SOHList = results.Read<SOHPrograms>().ToList(),
    BuildingList = results.Read<Building>().ToList(),
    AdministratorList = results.Read<Employee>().ToList(),
    NotAdminList = results.Read<Employee>().ToList(),
    InspectionList = results.Read<InspectionList>().ToList()
;

return inspectionDetails;

我已验证从 sql 查询中为每个列表返回了结果集。

【问题讨论】:

【参考方案1】:

这个问题有两个部分的答案,因为我有两个问题错误。第一个是我将 InspectionDetailList 作为列表从我删除的 Inspection 对象内部调用,第二个是更改调用 dapper 的代码以使用 using 语句并单独调用各个部分。感谢一位朋友和发现的溢出帖子之一here。

using(var results = con.QueryMultiple("GetInspections", p, commandType: CommandType.StoredProcedure, commandTimeout: 5000))

    var inspectionDetails = results.Read<Inspection>().First();
    inspectionDetails.OshList = results.Read<SOHPrograms>.ToList();
    inspectionDetails.BuildingList = results.Read<Building>.ToList(); 

【讨论】:

以上是关于枚举后Dapper返回结果失败的主要内容,如果未能解决你的问题,请参考以下文章

获取 dapper.QueryMultiple 方法返回的结果集计数

Dapper 映射结果列表

DB2 - 使用带有字符串数组参数的 Dapper 选择查询将不会返回正确的结果

Dapper Extension LIKE 运算符在匹配字符串时以相反的顺序返回结果

有时 Dapper 或 System.Data 不会为某些数据库(SQL Server 2012 和 2019)上的简单选择查询返回正确的结果

为啥我从 Dapper 返回的对象具有 null 和默认属性值?