【问题标题】:Does Dapper support an unknown number of result sets?Dapper 是否支持未知数量的结果集?
【发布时间】:2013-01-26 23:03:48
【问题描述】:

更新:

正如 Marc 在下面指出的,我的基本问题是:使用 QueryMultiple() 时,当 Read() 被调用的次数超过记录集时会发生什么?


我正在将现有的数据库调用从使用 SqlDataReader 转换为 Dapper。

虽然有问题。我调用了一个 sproc,它有条件地可以再调用 1-4 个 sproc。所以我可能有很多结果集。 为了简化我的解释,假设我只有 1-2 个结果集。如果第一个 sproc 没有被调用,但第二个 sproc 被调用,那么我的第一个 Read() 调用会吃掉第一个也是唯一的结果集。然后我有一堆应该是 ProjectItem 对象的无用 TeamItem 对象。然后它当然会在第二次调用 Read() 时崩溃,因为没有另一个结果集。

我是否遗漏了有关 Dapper 的某些内容,或者这是 Dapper 无法切实支持的极端情况?

if (_searchParams.WillSearchTeams)
{
    var teams = multi.Read<TeamItem>().ToList();
}
var projects = multi.Read<ProjectItem>().ToList();

【问题讨论】:

    标签: c# ado.net dapper


    【解决方案1】:

    我假设您已经在使用 QueryMultiple;听起来这里的基本问题是当您调用 Read 的次数超过网格时会发生什么。我想它可以返回一个空序列,但我怀疑某种 TryRead 会更好。不,它目前没有 - 但理论上可以。

    【讨论】:

    • 是的,我正在使用 QueryMultiple。当有两个结果集时它工作正常。哦,我猜。感谢您的回答。
    • @user 好吧,您希望它做些什么不同的事情?
    • @MarcGravell TryRead 方法(或返回空序列)是否有任何动力?我以前从未有过这种需要,但我正在开发一个可能有多个结果集的项目,我希望避免在每个Read() 上都使用try {} catch{}
    • @Gimbl 现在有一个属性表示多阅读器是否被完全消耗;那是你要的吗? IsConsumed
    • @Marc 您能否建议实现 TryRead 的方法。因为我从同一个查询中获取 3 个结果,这些结果可以是任何随机序列,具体取决于传递的参数。
    猜你喜欢
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2011-08-27
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2013-05-06
    相关资源
    最近更新 更多