在NHibernate中,我想检索一个实例,并在表示数据库检索实体的记录上放置一个排它锁。NHibernate:独占锁定
现在,我有这样的代码:
With.Transaction (session, IsolationLevel.Serializable, delegate
{
ICriteria crit = session.CreateCriteria (typeof (TarificationProfile));
crit.SetLockMode (LockMode.Upgrade);
crit.Add (Expression.Eq ("Id", tarificationProfileId));
TarificationProfile profile = crit.UniqueResult<TarificationProfile>();
nextNumber = profile.AttestCounter;
profile.AttestCounter++;
session.SaveOrUpdate (profile);
});
正如你所看到的,我设置LockMode此标准,以“升级”。 此问题的SQL Server的SQL语句,它使用updlock
和rowlock
锁提示:
不过,我希望能够使用真正的独占锁。也就是说,防止其他人可以阅读这个相同的记录,直到我释放锁定。 换句话说,我希望能够使用锁定提示xlock
而不是updlock
。
我不知道如何(或者即使)我能做到这一点....也许有人可以给我这个:)
如果确实有必要,我可以使用功能的SQLQuery一些提示的NHibernate,并写我自己的SQL查询,但是,我想尽可能避免这种情况。
你为什么要实现独占锁?可能还有其他解决方案。 – 2009-04-22 08:38:01
为什么?因为它是必要的...我的实体包含应使用一个计数器,我必须绝对确保该计数器正确使用... – 2009-04-22 08:58:56
你不应该读书的时候锁? – 2009-04-22 09:09:57