我想为NHibernate中对Session.SaveOrUpdate(myentity)的特定调用设置低于默认的CommandTimeout。这可能吗,如果是,该怎么做?
在我的代码中,我使用工作单元模式,因此特定工作单元/会话的超时也可以正常工作。
这个问题的背景:我有一个网络系统。其中有一些我想保存的日志记录/调试信息,但如果实际的数据库插入需要很长时间,我宁愿插入失败并快速返回(不到 1 秒),也不愿花费很长时间。但是,对于大多数其他数据库操作,默认命令超时是可以的。现在,插入几乎总是超级快。但是,如果由于某种原因数据库很慢(不是每天都会发生的事情),则网站的访问者会受到我想避免的慢日志记录的影响。由于信息并不重要,我希望一个简单的解决方案是设置数据库调用的超时。
无法为更新配置单个超时。
另一方面:
-
Save
/Update
/Delete
方法不一定会导致数据库调用。调用发生在Flush
上(插入具有标识 ID 的实体除外) -
insert
/update
语句通常不会超时。如果他们这样做,则您的设置有其他问题 - 您仍然可以配置全局
CommandTimeout
。让它足够长,以满足您的需求。
更新:阅读您的评论后,说您想做与我的想法相反的事情(即设置极低的超时),很明显您遇到了架构问题。
如果您正在编写的信息与当前请求无关,而不是尝试"尽快"保存它并在不够快时失败,您应该使用队列(选择任何)在请求之外甚至进程/机器之外进行插入。