Свободные соглашения NHibernate: OptimisticLock.Is(x => x.Version()) не работает

У меня проблемы с использованием OptimisticLock в качестве конвенции. Однако использование OptimisticLock в IndividualMap отлично работает. Он генерирует исключения для устаревшего состояния объекта.

Каждый класс, соответствующий таблице в базе данных, имеет свойство (которое соответствует столбцу в таблице) типа DateTime, которое я пытаюсь использовать для блокировки с помощью OptimisticLock.Version().

Это работает только тогда, когда я использую его в каждом ClassMap, я не хочу писать так много ClassMap, я вместо этого хочу использовать Auto Mapping.

Это работает так на карте классов

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

Итак, я начал использовать Конвенцию ниже, но она НЕ РАБОТАЕТ.

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

Я попытался установить DynamicUpdate и т. Д. Кажется, у меня ничего не работает. Пожалуйста помоги!

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();
Другие вопросы по тегам