【问题标题】:Fluent NHibernate Conventions : OptimisticLock.Is(x => x.Version()) doesn't work流畅的 NHibernate 约定:OptimisticLock.Is(x => x.Version()) 不起作用
【发布时间】:2017-02-22 01:56:34
【问题描述】:

我在使用 OptimisticLock 作为约定时遇到问题。 但是,在单个 ClassMap 中使用 OptimisticLock 可以正常工作。它抛出过时状态对象异常。

与数据库中的表对应的每个类都有一个 DateTime 类型的属性(对应于表中的一列),我试图将其用于使用 OptimisticLock.Version() 进行锁定。

只有在每个 ClassMap 中都使用它时才有效,我不想写那么多 ClassMap,而是想使用 Auto Mapping。

它在类映射中像这样工作

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

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

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

我尝试设置 DynamicUpdate 等。似乎没有什么对我有用。 请帮忙 !

【问题讨论】:

    标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping


    【解决方案1】:

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

    /// <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 对象时指定版本应该用于乐观锁定,像这样

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

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多