Fluent NHibernate 约定:OptimisticLock.Is(x => x.Version()) 不起作用

Fluent NHibernate Conventions : OptimisticLock.Is(x => x.Version()) doesn't work

我在使用 OptimisticLock 作为约定时遇到问题。 但是,在 Individual ClassMap 中使用 OptimisticLock 效果很好。它抛出陈旧状态对象异常。

每个 Class 对应于数据库中的 Table 都有一个 属性 (对应于 Table 中的一个列)我正在尝试的 DateTime 类型使用 OptimisticLock.Version().

进行锁定

只有当我在每个Class地图中使用它时它才有效,我不想写那么多Class地图,而是想使用自动映射。

它在 Class 地图中是这样工作的

Version(x => x.UpdTs).Column("UPD_TS"); OptimisticLock.Version();

所以,我开始使用下面的约定,但它不起作用。

OptimisticLock.IsAny(x => x.Version());

我尝试设置 DynamicUpdate 等。似乎对我没有任何作用。 请帮忙 !

这是我使用约定让它工作的方法:

/// <summary>
/// Class represents the Convention which defines which Property/Column serves as a part of the Optimistic Locking Mechanism.
/// </summary>
public class VersionConvention : IVersionConvention, IVersionConventionAcceptance
{
    public void Accept(IAcceptanceCriteria<IVersionInspector> criteria)
    {
        criteria.Expect(x => x.Name == "%COLUMN_NAME%");
    }

    /// <summary>
    /// Method applies additional overrides to the <see cref="IVersionInstance"/>
    /// </summary>
    /// <param name="instance"><see cref="IVersionInstance"/></param>
    public void Apply(IVersionInstance instance)
    {            
        instance.Column("%COLUMN_NAME%");
    }
}

%COLUMN_NAME% 以上是 属性 用于锁定使用版本。

然后在创建 FluentConfiguration 对象时指定 Version 应该用于乐观锁定,如下所示

OptimisticLock.Is(x => x.Version();