バージョン 1) 手動でチェックするか、2) NHibernate に組み込まれているバージョニング機能と DB のタイムスタンプ タイプに依存します。(SQL Serverはそれをサポートしていますが、おそらく他のDBも何らかの形でサポートしています)。2 番目のケースでは、 を処理する必要がありexception
ます。
NHibernate http://ayende.com/blog/3946/nhibernate-mapping-concurrencyで同時実行を処理する方法の詳細な説明があります。
SQL Server を使用している場合は、列を作成できます
CREATE TABLE [dbo].[MyTable](
...
[Version] [rowversion] NOT NULL -- new keyword for deprecated [timestamp]
...
次に、バージョン マッピングを調整します。
<version name="Version" generated="always" unsaved-value="null" type="BinaryBlob">
<column name="Version" not-null="false" sql-type="timestamp" />
</version>
また、バージョン番号をクライアントに渡し、POST でもバインドする必要があります (例: base64
)
session.Update(entity)
DB でより古い Version 値を持つを試みるたびに、NHibernate は をスローしNHibernate.StaleObjectStateException
ます。そして、この場合にのみ、あなたはそれを扱うことができます。バージョンが一致する場合、すべてが正しく機能し、UPDATE ステートメントは成功します。