我想知道如何处理嵌套事务,例如之间 一开始和提交,我有另一个开始和提交。我的原因 问你是因为在我的ApplicationServices项目中 依赖于其他服务的服务。和父母的方法 服务开始一个事务,并根据一些逻辑,它可能 必须调用依赖子服务的方法之一,即 也反过来执行开始和提交。儿童服务方法是 也可以直接从控制器中独立使用, 因此我必须在子服务中使用begin和commit。
简而言之,基本上我最终会得到类似的东西
using( Repository1.DbContext.BeginTransaction() )
{
try
{
.....
.....
using( Repository2.DbContext.BeginTransaction() )
{
try
{
.....
.....
Repository2.DbContext.CommitTransaction()
}
catch
{
Repository2.DbContext.RollBack();
throw;
}
}
Repository1.DbContext.CommitTransaction()
}
catch
{
Repository1.DbContext.RollBack();
throw;
}
}
所以有嵌套的开始和提交。我想知道
- 当嵌套的Repository2获得时,行为是什么 已成功提交,但父Repository1已回滚?
如何在代码中控制此行为,例如
- 如果我不想让子事务成为父事务的一部分 交易。 - 如何弄清楚之前已经在运行的事务 创建子事务
或者是否有另一个优雅的解决方案来解决这个问题?
由于 纳贝尔
答案 0 :(得分:3)
NHibernate不支持嵌套事务。 Repository1和Repository2的DbContext是否相同?如果是这种情况,那么他们可以参与同一交易。如果没有,您必须将事务拆分为两种方法或查看System.Transactions namespace。
答案 1 :(得分:0)
如果您将事务边界放在控制器级别,那么我会说您不需要嵌套事务。
答案 2 :(得分:0)