Я пытаюсь добиться своего рода поведения вложенных транзакций, используя управление транзакциями NHibernate и параметры FlushMode, но после слишком большого чтения все становится немного запутанным, поэтому любое подтверждение фактов, которые я перечислю ниже, будет очень полезным.
Я хочу открыть одну большую транзакцию, которая разбивается на маленькие транзакции.Представьте себе следующий сценарий:
- TX1 открывает TX и вставляет запись человека;
- TX2 открывает TX и обновляет имя этого человека до P2;
- TX2 фиксирует;
- TX3 открывает TX и обновляет имя этого человека до P3;
- откаты TX3;
- TX1 фиксирует;
Я бы хотелчтобы увидеть, как NH отправляет INSERT и TX2 UPDATE в базу данных, просто игнорируя, какой TX3, когда он был откатан.
Я пытался использовать FlushMode = Never и очищать сеанс только после соответствующих Begins / Commits /Откат был востребован, но NH всегда обновляет базу данных в соответствии с конечным состоянием объекта, независимо от фиксации и отката. Это нормально?Действительно ли NH игнорирует управление транзакциями при работе с FlushMode = Never?
Я также пытался использовать FlushMode = Commit и открывать вложенные транзакции, но я обнаружил, что, поскольку ADO.NET, вложенныйтранзакции, на самом деле, всегда являются одной и той же транзакцией.
Обратите внимание, что я не пытаюсь добиться поведения "все или ничего".Я ищу более безопасный способ работы. Есть ли способ сделать это (точки сохранения) с NH?
Заранее спасибо.
Filipe