1

我知道 nhibernate 不支持嵌套事务。

假设我得到了这样的东西:

  1. UserService.BeginTransaction(在当前会话上)
  2. 用户服务.保存
  3. 用户服务->FeedService
    1. FeedService.BeginTransaction(在当前会话中)
    2. FeedService.Save
    3. FeedService.Commit(在#3.1 中返回的事务上)
  4. 用户服务->地址服务
    1. AddressService.BeginTransaction(在当前会话上)
    2. 地址服务.保存
    3. AddressService.Commit(在 #4.1 中返回的事务上)
  5. UserService.Commit(在 #1 中返回的事务上)

在 #3.3 中调用 commit 时会发生什么,事务是否已提交?我需要一切来成功或失败。

4

2 回答 2

0

是的。3.1 中的 BeginTransaction 调用不会做任何事情,因为已经有一个活动事务。如果您希望您的所有操作都参与同一个事务,那么不要在 3.x 和 4.x 中调用 Begin/End Transaction。

我的建议是不要在服务或存储库类中使用事务。我要么在 UI 级别控制事务,要么创建一个封装业务流程的类。

于 2010-09-21T17:38:42.777 回答
0

正如 Jamie 所说,交易应该在更高的层次上进行管理,以避免这种情况。

但是,如果您出于某种原因必须将开始/提交保持在“服务”级别,则可以将所有内容包装在 a中,只有在一切成功后TransactionScope您才会这样做。Complete()

于 2010-09-21T19:32:40.587 回答