2016-04-27 5 views
2

我々セットアップNHB構成で汚れた楽観的ロックとのエンティティの更新:はNHBから一つのフィールドを除外する汚い楽観的ロック

.Override<OurEntity>(x => 
{ 
    x.DynamicUpdate(); 
    x.OptimisticLock.Dirty(); 
... 
} 

それは更新が唯一実際にフィールドを変更要求を生成し、WHERE誰のスレッドがこれを得ないことを保証する声明フィールドは並行して更新され、結果はUPDATE OurEntity SET f1 = 'new value' WHERE f1 = 'old value'のようになります。

ただし、1つのフィールドをオプティミスティック・ロックから除外して、数十もの他のフィールドと同じように機能させる必要がある場合はどうなりますか? WHEREステートメントは、このフィールドをクエリに含めません。スレッドの数と、この特定のフィールドを並行して更新する頻度は気にしません。

できますか?オプティミスティックロックではない場合、回避策に関する提案はありますか?ありがとう

回避策の1つは、フィールドを別のテーブルに移動することですが、この方法は避けてください。

答えて

1

あなたは楽観的ロックチェックから無視したいフィールド上)(.Not.OptimisticLockを追加します。

.Override<OurEntity>(x => 
{ 
    x.DynamicUpdate(); 
    x.OptimisticLock.Dirty(); 
    x.Map(f => f.FieldToExclude).Not.OptimisticLock(); 
    ... 
} 

それは参考にも動作します:

References(f => f.ReferencedObject).Not.OptimisticLock();