从Nhb脏乐观锁定中排除一个字段

时间:2016-04-27 17:23:03

标签: c# nhibernate

我们使用Nhb配置中的脏乐观锁定来设置实体更新:

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

它生成的请求仅使用WHERE语句更新实际更改的字段,确保没有任何一个线程并行更新此字段,从而导致UPDATE OurEntity SET f1 = 'new value' WHERE f1 = 'old value'等查询。

然而,如果现在我们需要从乐观锁定中排除一个单独的字段,让它像其他几十个一样工作?这样WHERE语句在查询中不包含这个字段,因为我们不关心有多少线程以及并行更新这个特定字段的频率。

有可能吗?如果没有乐观锁定,有关解决方法的任何建议吗?感谢

其中一种解决方法是将字段移到单独的表中,但我们希望避免这种方法。

1 个答案:

答案 0 :(得分:1)

在乐观锁定检查中要忽略的字段上添加.Not.OptimisticLock():

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

它也适用于参考文献:

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