I'm trying to achieve some kind of nested transaction behavior using NHibernate's transaction control and FlushMode options, but things got a little bit confusing after too much reading, so any confirmation about the facts I list below will be very usefull.
What I want is to open one big transaction that splits in little transactions. Imagine the following scenario:
- TX1 opens a TX and inserts a Person's record;
- TX2 opens a TX and updates this Person's name to P2;
- TX2 commits;
- TX3 opens a TX and updates this Person's name to P3;
- TX3 rollbacks;
- TX1 commits;
I'd like to see NH sending the INSERT and the TX2 UPDATE to the database, just ignoring what TX3, as it was rolled back.
I tried to use FlushMode = Never and only flushing the session after the proper Begins/Commits/Rollbacks have been demanded, but NH always update the database with the object's final state, independent of commits and rollbacks. Is that normal? Does NH really ignores transactional control when working with FlushMode = Never?
I've also tried to use FlushMode = Commit and openning the nested transactions, but I discovered that, because ADO.NET, the nested transactions are, actually, always the same transaction.
Note that I'm not trying to achieve a "all or nothing" behavior. I'm looking more to a savepoint way of working. Is there a way to do that (savepoints) with NH?
Thank you in advance.
Filipe