在Sharp Architecture中使用NHibernate处理嵌套事务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Sharp Architecture中使用NHibernate处理嵌套事务相关的知识,希望对你有一定的参考价值。
我想知道如何处理嵌套事务,例如在一个开始和提交之间,我有另一个开始和提交。我问你的原因是因为在我的ApplicationServices项目中我有依赖于其他服务的服务。父服务的方法开始一个事务,并且根据某些逻辑,它可能必须调用依赖子服务的一个方法,这些方法又执行开始和提交。 Child服务方法也可以直接从控制器中独立使用,因此我必须在子服务中使用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被回滚时,行为会是什么?
如何在代码中控制此行为,例如
- 如果我不想让子事务成为父事务的一部分。 - 如何在创建子事务之前弄清楚事务是否已经运行
或者如果有另一个优雅的解决方案吗?
谢谢Nabeel
NHibernate不支持嵌套事务。 Repository1和Repository2的DbContext是否相同?如果是这种情况,那么他们可以参与同一交易。如果没有,你必须将交易拆分为两种方法或者查看System.Transactions namespace。
如果将事务边界放在控制器级别,那么我会说您不需要嵌套事务。
您是否尝试过Sharp-Architecture-Contrib项目中的UnitOfWork属性?
http://github.com/codai/Sharp-Architecture-Contrib
http://tomcabanski.spaces.live.com/blog/cns!E0D3617496209F45!220.entry
http://wiki.sharparchitecture.net/ContribConfiguration.ashx
http://wiki.sharparchitecture.net/ContribUnitOfWork.ashx
以上是关于在Sharp Architecture中使用NHibernate处理嵌套事务的主要内容,如果未能解决你的问题,请参考以下文章
在 webpack 中使用 node-loader 安装“sharp”模块出现问题
如何在nodejs中使用sharp调整图像大小然后使用multer上传