NHibernate を使用して楽観的/悲観的な同時実行をどのようにサポートしますか?
3 に答える
NHibernate は、2 種類の楽観的並行性をサポートしています。
マッピング ファイルの "class" 要素で "optimistic-lock=dirty" 属性を使用してダーティ フィールドをチェックするか、"optimistic-lock=version" (これもデフォルトです) を使用できます。バージョンを使用している場合は、データベースのフィールドにマップするマッピング ファイルに「バージョン」要素を指定する必要があります。
バージョンは、Int64、Int32、Int16、Ticks、Timestamp、または TimeSpan のタイプで、保存時に自動的にインクリメントされます。詳細については、NHibernate のドキュメントの第 5 章を参照してください。
NHibernate は、デフォルトで楽観的並行性をサポートします。一方、悲観的並行性は、このISession.Lock()
メソッドを使用して実現できます。
これらの問題については、このドキュメントで詳しく説明します。
バージョン番号を「ただ」手動で比較することもできます (エンティティに Version プロパティを追加したと仮定します)。
明らかに楽観的が唯一の健全な選択肢です。もちろん、クレイジーなシナリオに対処しなければならないこともありますが...