我在使用OptimisticLock作为约定时遇到问题。 但是,在Individual ClassMap中使用OptimisticLock可以正常工作。它抛出Stale State Object Exceptions。
对应于数据库中的表的每个类都有一个DateTime类型的属性(对应于表中的列),我试图使用OptimisticLock.Version()来锁定它。
只有当我在每个ClassMap中使用它时才有效,我不想写这么多ClassMaps,而是想要使用自动映射。
Version(x => x.UpdTs).Column("UPD_TS");
OptimisticLock.Version();
OptimisticLock.IsAny(x => x.Version());
我尝试设置DynamicUpdate等。似乎没有什么对我有用。 请帮忙 !
答案 0 :(得分:0)
以下是我使用公约所做的工作:
/// <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();