Achieving NHibernate Nested Transactions Behavior

后端 未结 2 1586
时光说笑
时光说笑 2021-01-06 08:58

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 to

相关标签:
2条回答
  • 2021-01-06 09:17

    Just to don't leave this question open forever, I'll post the solution that we've adopted.

    We have a unit of work like container that manages the nested transaction behavior. Depending on the kind of treatment that we want, it creates (or not) new sessions. By example:

    • Continue on error: if we want that even if on a transaction error the other ones commits, the UoW container uses different sessions for each "transaction" and flushes every tx in the end of its work;
    • Rollback on error: if we want that on a session rollback (because of an error or a business rollback) every other transaction gets rolled back, the UoW container uses the same session for all of the nested transactions and rolls back everybody in the end.

    It's important to say that the "transaction" that this UoW manipulates isn't the NH (ADO.NET) transaction directly. We've created an abstraction of a transaction so the manipulation code "votes" if our transaction might be commited or rolled back, but the real action just occurs in the end of everything, based on the selected error strategy.

    We know that this usage isn't very common and only fits on specific scenarios (in our case it's an integration scenario with batch processing), so I'll now post code. If anyone thinks that this implementation can help, please, send me a message and I'll be glad to share the code.

    Regards,

    Filipe

    0 讨论(0)
  • 2021-01-06 09:17

    NHibernate does not support nested transactions. Each ISession can have at most one active transaction. I'm not sure what you;re trying to accomplish because your example scenario doesn't make sense to me. Committing transaction 1 after the insert would have the same effect.

    0 讨论(0)
提交回复
热议问题