jfn*_*eis 4 nhibernate transactions nested-transactions savepoints
我正在尝试使用NHibernate的事务控制和FlushMode选项来实现某种嵌套事务行为,但是在阅读太多之后事情变得有点混乱,所以我在下面列出的事实的任何确认都将非常有用.
我想要的是打开一个在小事务中分裂的大事务.想象一下以下场景:
我想看看NH将INSERT和TX2 UPDATE发送到数据库,只是忽略了回滚的TX3.
我尝试使用FlushMode = Never并且只在需要正确的Begins/Commits/Rollbacks之后才刷新会话,但NH总是使用对象的最终状态更新数据库,与提交和回滚无关.这是正常的吗?使用FlushMode = Never时NH是否真的忽略了事务控制?
我还尝试使用FlushMode = Commit并打开嵌套事务,但我发现,因为ADO.NET,嵌套事务实际上总是相同的事务.
请注意,我并不是想要实现"全有或全无"的行为.我正在寻找一种保存点的工作方式.NH有没有办法(保存点)?
先感谢您.
菲利佩
只是不要永远打开这个问题,我会发布我们采用的解决方案.
我们有一个像容器这样的工作单元来管理嵌套的事务行为.根据我们想要的治疗方式,它会创建(或不创建)新会话.举例:
重要的是要说这个UoW操作的"事务"不是直接的NH(ADO.NET)事务.我们创建了一个事务的抽象,因此如果我们的事务可能被提交或回滚,操作代码会"投票",但实际操作只会在所有内容的最后发生,基于所选的错误策略.
我们知道这种用法并不常见,只适用于特定的场景(在我们的例子中,这是一个带批处理的集成场景),所以我现在发布代码.如果有人认为这个实现可以提供帮助,请给我发一条消息,我很乐意分享这些代码.
问候,
菲利佩