【发布时间】:2013-08-24 02:36:11
【问题描述】:
首先让我说明我要完成的工作。我有一个填充了工作的表。还有一个 Web 服务,其方法允许更改作业数据,称为SaveJob。此方法检索作业及其所有数据,对新数据运行验证(需要对其他表进行一些数据库查询),然后将其保存回数据库。它有点慢。大约一秒钟。
有时会发生两个SaveJob 调用会在同一个工作中靠近在一起,并且它们会相互覆盖。现在这是唯一的网络服务器,但我希望我的解决方案网络场兼容,所以即使我知道如何使用单例解决这个问题,我更愿意让数据库处理锁。
问题是当它尝试读取已被另一个 SaveJob 调用更改的作业时,我可以使用 NHibernate 和 SQL Server 数据库锁来阻止第二个 SaveJob 调用吗?
我相信答案是肯定的,但我不确定该怎么做。我已阅读有关ISession.Lock() 的文档,我相信我需要使用NHibernate.LockMode.Upgrade
我的下一个问题是这个锁什么时候释放?
我假设它在事务提交时被释放,但我找不到任何明确说明这一点的文档。
但是,如果是这种情况,那么有没有办法让我打开另一个事务并运行一些查询,而无需关闭我最初获得工作时开始的事务?还是我必须在一笔交易中完成这一切?
【问题讨论】:
标签: .net nhibernate