Свободные соглашения 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();