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を設定します。
は今のところ、私はこのコードを持っています。 これはupdlock
とrowlock
ロックヒントを使用するSQL Server用のSQL文を発行します。
しかし、私は本当の排他ロックを使用することができるようにしたいです。つまり、私がロックを解除するまで、他の人がこの非常に同じレコードを読むことを防ぐことができます。 つまり、updlock
ではなく、xlock
のロックヒントを使用したいと考えています。
私は(または場合でも)、私はそれを達成することができますかわからない....たぶん誰かが私にこの:)それは本当に必要な場合
、私はのSQLQuery機能を使用することができますについていくつかのヒントを与えることができますNHibernateの独自のSQLクエリを書くことができますが、できるだけ避けたいと思います。
あなたが排他ロックを達成したいのはなぜ?おそらく他の解決策があります。 –
なぜですか?それは必要なので...私のエンティティには使用すべきカウンタが含まれており、このカウンタが正しく使用されていることを絶対に確かめる必要があります... –
読み込み時にロックしないでください。 –