【问题标题】:Why does Dapper's .Execute(...) return an int?为什么 Dapper 的 .Execute(...) 返回一个 int?
【发布时间】:2015-10-30 21:20:46
【问题描述】:

有人知道为什么 Dapper 从 .Execute(...) 返回一个 int 吗?

我在任何地方都找不到此文档。

【问题讨论】:

  • 抛开一切:这对我来说是一个设计问题。你有没有曾经在它的 github 页面上问过这个问题?还是项目创建者? AFAIK,Marc Gravell 是合著者之一。您可以在聊天或推特等上 ping 他。
  • 感谢@ron beyer 的有益建议,但我希望其他人知道,因此我会节省时间。如果每个人都为自己解决所有问题,您将无需为宝贵的互联网积分回答问题吗?
  • 我做了一点的研究。我检查了项目文档并检查了是否存在类似问题。我开始浏览 GH 上的源代码,几分钟后想……为什么不问一下。这样做的另一个好处是,现在没有其他人必须这样做:)
  • 对于 OP 对“缺乏”研究的所有抨击,当我在谷歌上搜索“dapper 执行返回值”时,这个问题是最好的结果。好像需要问一下……
  • 我同意,我们不应该深入研究源代码来了解返回值的含义。这应该在 github.com/StackExchange/Dapper 的自述文件中详细说明。这是一个有价值的问题,可以让其他人不必深入研究源代码。

标签: c# sql-server dapper


【解决方案1】:

整数表示受查询影响的行数。

它返回一个整数,以便您知道您的查询是否有效。如果返回零并且您期望某些内容发生了变化,那么您就知道有问题了。

【讨论】:

  • 谢谢! @RahulTripathi 这对我来说都是答案:)
  • 但是 0 可能没问题。例如,假设您正在更新一条记录,但在执行之前,它已从您下方删除(假设没关系)。我想了解有关此返回码的更多详细信息。当记录不存在时(如我的示例)以及是否存在某种类型的失败(我可能想以不同的方式采取行动),它会返回 0 吗?还是失败总是会导致异常?
  • @JustLooking 不存在的记录不是失败。所以你只会得到零响应。
  • @CathalMF -- 我同意。也许我不清楚,我的错。我的意思是,我认为未找到的记录应该返回 0。但是是否存在未找到记录之外的实例也会返回 0?例如,某种类型的故障。或者相反,所有失败都会是一个例外。因此,它返回 0 表示未找到,1(或更多)表示实际受影响的记录,异常表示失败。
  • 或者至少有人给我指出了好的简洁文档。看看微软。例如,我正在查看 DataAdapter 更新文档。它说它返回一个 Int32(更新的行),然后列出它抛出的异常。完美的! Dapper 等价物在哪里?
【解决方案2】:

因为DbCommand.ExecuteNonQuery(毫无疑问,Dapper 在内部使用它)返回一个 int 表示受影响的行数。为什么?因为它或多或少是免费的,并且是您唯一可以合理地返回通用 INSERT 或 UPDATE 的东西。

【讨论】:

  • 这本应该送人的!
猜你喜欢
  • 1970-01-01
  • 2017-06-12
  • 2020-10-31
  • 2013-02-26
  • 1970-01-01
  • 2017-10-08
  • 2013-09-23
  • 1970-01-01
  • 2014-03-31
相关资源
最近更新 更多