nhibernate和嵌套事务

时间:2010-09-20 19:01:42

标签: .net nhibernate transactions nested nested-transactions

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

让我说我有这样的事情:

  1. UserService.BeginTransaction(在当前会话中)
  2. UserService.Save
  3. UserService-> FeedService
    1. FeedService.BeginTransaction(在当前会话中)
    2. FeedService.Save
    3. FeedService.Commit(关于#3.1中返回的交易)
  4. UserService-> AddressService
    1. AddressService.BeginTransaction(在当前会话中)
    2. AddressService.Save
    3. AddressService.Commit(关于#4.1中返回的交易)
  5. UserService.Commit(关于#1中返回的交易)
  6. 在#3.3中调用commit时会发生什么?是否提交了事务?我需要一切成功或失败。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

但是,如果必须出于某种原因将保持在“服务”级别,您可以将所有内容包装在TransactionScope中,您将Complete()只有在一切都成功之后。