Как вы поддерживаете оптимистический/пессимистический concurrency с помощью NHibernate?
Как вы относитесь к concurrency в NHibernate?
Ответ 1
NHibernate по умолчанию поддерживает оптимистичный concurrency. Пессимистический concurrency, с другой стороны, может быть выполнен с помощью метода ISession.Lock()
.
Эти вопросы подробно обсуждаются в этот документ.
Ответ 2
NHibernate поддерживает 2 типа оптимистических concurrency.
Вы можете либо проверить грязные поля, используя атрибут "optimistic-lock = dirty" в элементе "class" в ваших файлах сопоставления, либо вы можете использовать "optimistic-lock = version" (который также является значением по умолчанию). Если вы используете версию, вам необходимо предоставить элемент "version" в вашем файле сопоставления, который будет отображаться в поле в вашей базе данных.
Версия может иметь тип Int64, Int32, Int16, Ticks, Timestamp или TimeSpan и автоматически увеличивается при сохранении. Подробнее см. Глава 5 в документации NHibernate.
Ответ 3
Вы также можете "просто" вручную сравнить номера версий (при условии, что вы добавили свойство Version в свою сущность).
Ясно Оптимистичный - единственный разумный вариант. Иногда, конечно, нам приходится иметь дело с сумасшедшими сценариями, однако...