문제

I know that nhibernate doesnt support nested transactions.

Let's say that I got something like this:

  1. UserService.BeginTransaction (on current session)
  2. UserService.Save
  3. UserService->FeedService
    1. FeedService.BeginTransaction (on current session)
    2. FeedService.Save
    3. FeedService.Commit (on the returned transaction in #3.1)
  4. UserService->AddressService
    1. AddressService.BeginTransaction (on current session)
    2. AddressService.Save
    3. AddressService.Commit (on the returned transaction in #4.1)
  5. 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'll Complete() only after everything suceeds.

다른 팁

Yes. The BeginTransaction call in 3.1 won't do anything because there is already an active transaction. If you want all of your operations to participate in the same transaction then don't call Begin/End Transaction in 3.x and 4.x.

My advice is to not use transactions in service or repository classes. I either control the transaction at the UI level or create a class that encapsulates the business process.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top