2009-07-13 8 views
1

SQL Serverは、NHibernateが悲観的なロックを行うために使用する「SELECT FOR UPDATE」構文をサポートしていません。 私は他の選択肢のhere on StackOverflowの説明を読んでいます(私は「SELECT WITH(...)」がかなり近いので好きでした)。NHibernateを使用したSQL Server 2008のペシミスティックロック

ただし、NHibernateはこの構文をサポートしていないようです。

回避策はありますか? これはNHibernateの内部構造を工夫することで実現できますが、現時点ではコスト効果がありません(学習曲線)。 私はおそらく、アプリケーションロックを持つストアドプロシージャを使用し、NHibernateからアクセスすることもできます。 他の提案はありますか? (書く前に常に読むのとは別に)

+2

はその悲観的ロックではないですか?オプティミスティックロックとは、行を変更しないことを希望し、更新の変更をテストすることです。 –

+0

もちろん、あなたは正しいです。ありがとう、編集。 –

答えて

2

NHibernateのは楽観的ロックのバージョンの戦略を持っています

http://ayende.com/Blog/archive/2009/04/15/nhibernate-mapping-concurrency.aspx

+0

Ayendeさんのブログは素晴らしいです。私は誤って楽観的なロックについて尋ねましたが(私は悲観的なロックが必要ですが)、この投稿は私を助けました - それはsession.Get (1、LockMode.Upgrade); FROM ... WITH(updlock、rowlock) - NHibernate(少なくとも2.x以上)はSQL Serverの悲観的なロック構文をサポートします。 –

0

NHibernateについてよく知っていますが、ROWVERSION型のSQLカラムでは、オプティミスティックロックを実装するためによく使われます。例here

関連する問題