I know that nhibernate doesnt support nested transactions.
Let's say that I got something like this:
- UserService.BeginTransaction (on current session)
- UserService.Save
- UserService->FeedService
- FeedService.BeginTransaction (on current session)
- FeedService.Save
- FeedService.Commit (on the returned transaction in #3.1)
- UserService->AddressService
- AddressService.BeginTransaction (on current session)
- AddressService.Save
- AddressService.Commit (on the returned transaction in #4.1)
- UserService.Commit (on the returned transaction in #1)
What happens when commit is invoked in #3.3, is the transaction commited? I need everything to either succeed or fail.
As Jamie said, transactions should be managed at a higher level to avoid this situation.
However, if you must keep the begin/commit at the "Service" level for whatever reason, you could wrap everything in a
TransactionScope
, which you'llComplete()
only after everything suceeds.