枚举后Dapper返回结果失败

时间:2013-12-27 21:10:07

标签: dapper

我有一个精巧的查询多功能,除了第一个列表外,它输出了许多不同的列表。在调试时我发现当代码到达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 个答案:

答案 0 :(得分:0)

这个问题有两部分答案,因为我有两个问题错误。第一个是我将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(); 
}