1

我想为 NHibernate 中对 Session.SaveOrUpdate(myentity) 的特定调用设置低于默认值的 CommandTimeout。这可能吗?如果可以,该怎么做?

在我的代码中,我使用 UnitOfWork 模式,因此特定工作单元/会话的超时也可以正常工作。

这个问题的背景:我有一个网络系统。其中有一些我想保存的日志记录/调试信息,但是如果实际的数据库插入需要很长时间,我宁愿插入失败并快速返回(不到 1 秒)而不是花费很长时间。但是,对于大多数其他数据库操作,默认命令超时是可以的。现在插入几乎总是超级快。但是,如果数据库由于某种原因很慢(不是每天都发生的事情),网站的访问者会受到我希望避免的慢速日志记录的影响。由于信息并不重要,我希望一个简单的解决方案是设置数据库调用的超时。

4

1 回答 1

0

无法为更新配置单独的超时。

另一方面:

  • Save//方法不一定会导致DB调用UpdateDelete调用发生在Flush(除了插入具有标识 id 的实体)
  • insert/update语句通常不会超时。如果他们这样做了,则说明您的设置有其他问题
  • 您仍然可以配置全局CommandTimeout. 让它足够长以满足您的需求。

更新:在阅读了您的评论后,说您想做与我想的相反的事情(即设置极低的超时时间),很明显您遇到了架构问题。

如果您正在编写的信息与当前请求无关,而不是尝试“尽可能快地”保存它并且如果速度不够快就失败,您应该使用队列(选择任何一个)在请求,甚至退出进程/机器。

于 2012-10-04T14:27:32.513 回答