gpt4 book ai didi

nhibernate - 实现 NHibernate 嵌套事务行为

转载 作者:行者123 更新时间:2023-12-04 23:32:48 25 4
gpt4 key购买 nike

我正在尝试使用 NHibernate 的事务控制和 FlushMode 选项来实现某种嵌套的事务行为,但是在阅读过多之后事情变得有点困惑,因此对我在下面列出的事实的任何确认都将非常有用。

我想要的是打开一个分成小笔交易的大笔交易。想象以下场景:

  • TX1打开一个TX,插入一个Person的记录;
  • TX2打开一个TX并将这个Person的名字更新为P2;
  • TX2 提交;
  • TX3打开一个TX并将这个Person的名字更新为P3;
  • TX3 回滚;
  • TX1 提交;

  • 我希望看到 NH 将 INSERT 和 TX2 UPDATE 发送到数据库,而忽略 TX3,因为它已回滚。

    我尝试使用 FlushMode = Never 并且仅在要求正确的开始/提交/回滚后刷新 session ,但 NH 始终使用对象的最终状态更新数据库,与提交和回滚无关。 这是正常的吗?当使用 FlushMode = Never 时,NH 真的会忽略事务控制吗?

    我还尝试使用 FlushMode = Commit 并打开嵌套事务,但我发现,因为 ADO.NET,嵌套事务实际上始终是同一个事务。

    请注意,我并不是要实现“全有或全无”的行为。我正在寻找更多的保存点工作方式。 有没有办法用 NH 做到这一点(保存点)?

    先感谢您。

    飞利浦

    最佳答案

    为了不要让这个问题永远悬而未决,我将发布我们采用的解决方案。

    我们有一个类似容器的工作单元来管理嵌套的事务行为。根据我们想要的治疗类型,它会创建(或不创建)新 session 。举例:

  • 继续出错:如果我们希望即使发生其他事务错误,UoW 容器也会为每个“事务”使用不同的 session ,并在其工作结束时刷新每个 tx;
  • 错误回滚:如果我们希望在 session 回滚(由于错误或业务回滚)时每个其他事务都回滚,则 UoW 容器对所有嵌套事务使用相同的 session ,并最终回滚每个人。

  • 重要的是要说这个 UoW 操纵的“事务”不是直接的 NH (ADO.NET) 事务。我们已经创建了一个事务的抽象,因此操作代码会“投票”我们的事务是否可能被提交或回滚,但实际操作只会发生在所有事情的最后,基于所选的错误策略。

    我们知道这种用法不是很常见,只适用于特定场景(在我们的例子中它是带有批处理的集成场景),所以我现在将发布代码。如果有人认为此实现可以提供帮助,请给我发送消息,我很乐意分享代码。

    问候,

    飞利浦

    关于nhibernate - 实现 NHibernate 嵌套事务行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2670052/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com