设置NHibernate SaveOrUpdate调用的CommandTimeout

时间:2012-10-04 08:40:04

标签: c# nhibernate timeout

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

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

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

1 个答案:

答案 0 :(得分:0)

无法为更新配置个别超时。

另一方面:

  • Save / Update / Delete方法不一定会导致数据库调用。调用发生在Flush上(除了具有身份ID的实体的插入)
  • insert / update语句通常不会超时。如果他们这样做,您的设置还有其他问题
  • 您仍然可以配置全局CommandTimeout。使它足够长,以满足您的需求。

更新:在阅读你的评论后,说你想做我认为的相反的(即设置极低的超时),很明显你有一个架构问题。

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