我知道NHIBERNATE不支持嵌套交易。

假设我有这样的东西:

  1. uservice.beginTransaction(在当前会话中)
  2. uservice.save
  3. 用户服务 - > feedService
    1. feedService.BeginTransaction(在当前会话中)
    2. feedService.save
    3. feedService.commit(在#3.1中的返回交易中)
  4. userService->地址服务
    1. adversyService.BeginTransaction(在当前会话中)
    2. 地址服务
    3. addressService.commit(在#4.1中的返回交易中)
  5. uservice.commit(在#1的返回交易中)

在#3.3中调用提交时会发生什么,交易是在进行的吗?我需要一切才能成功或失败。

有帮助吗?

解决方案

正如杰米(Jamie)所说,应在更高层次上进行交易,以避免这种情况。

但是,如果你 必须 无论出于何种原因,都可以将开始/提交在“服务”级别上,您可以将所有内容包裹在一个 TransactionScope, ,你会的 Complete() 只有在一切成功之后。

其他提示

是的。 3.1中的开始触发电话不会做任何事情,因为已经有一个主动事务。如果您希望所有操作都参加同一交易,请不要以3.x和4.x的方式调用开始/结束交易。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top