В 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 для этого критерия на "Upgrade".
Это вызывает инструкцию SQL для SQL Server, которая использует подсказки для блокировки updlock
и rowlock
:
SELECT ... FROM MyTable with (updlock, rowlock)
Однако я хочу использовать реальный эксклюзивный замок. То есть, не позволяйте другим читать эту самую запись, пока я не отпущу замок.
Другими словами, я хочу использовать подсказку xlock
для блокировки вместо updlock
.
Я не знаю, как (или даже если) я могу добиться этого... Может быть, кто-то может дать мне несколько намеков об этом:)
Если это действительно необходимо, я могу использовать функциональность SQLQuery для NHibernate и написать свой собственный SQL-запрос, но я бы хотел как можно больше избежать этого.