NHIBERNATE和嵌套交易
-
04-10-2019 - |
题
我知道NHIBERNATE不支持嵌套交易。
假设我有这样的东西:
- uservice.beginTransaction(在当前会话中)
- uservice.save
- 用户服务 - > feedService
- feedService.BeginTransaction(在当前会话中)
- feedService.save
- feedService.commit(在#3.1中的返回交易中)
- userService->地址服务
- adversyService.BeginTransaction(在当前会话中)
- 地址服务
- addressService.commit(在#4.1中的返回交易中)
- uservice.commit(在#1的返回交易中)
在#3.3中调用提交时会发生什么,交易是在进行的吗?我需要一切才能成功或失败。
解决方案
正如杰米(Jamie)所说,应在更高层次上进行交易,以避免这种情况。
但是,如果你 必须 无论出于何种原因,都可以将开始/提交在“服务”级别上,您可以将所有内容包裹在一个 TransactionScope
, ,你会的 Complete()
只有在一切成功之后。
其他提示
是的。 3.1中的开始触发电话不会做任何事情,因为已经有一个主动事务。如果您希望所有操作都参加同一交易,请不要以3.x和4.x的方式调用开始/结束交易。
我的建议是不要在服务或存储库类中使用交易。我要么控制UI级别的交易,要么创建封装业务流程的类。
不隶属于 StackOverflow