gpt4 book ai didi

c# - .net 嵌套事务范围

转载 作者:行者123 更新时间:2023-11-30 14:29:14 28 4
gpt4 key购买 nike

我们认为我们了解事务作用域和嵌套 (transactionscope.requires) - 即

-------------------------------------------------------inner    | outer     |  -------------------------------------------------------commit   | rollback  |  no changes are committed commit   | commit    |  all changes are committedrollback | rollback  |  no changes are committedrollback | commit    |      ---- doesn't work ----

但是,我想知道,是否有任何方法可以创建事务作用域、嵌套事务作用域、依赖事务、自定义事务或任何回滚提交方案也适用的方法? -

即您在库函数中有一些东西,无论出于何种原因,它都有自己的事务,它位于父事务之下。如果内层事务成功,那么外层事务可以访问任何变化,但是如果内层事务回滚,外层事务仍然处于完全可用的状态,完全不受内层事务的影响,就好像从未被调用过一样?

最佳答案

不,我相信你想错了。它仍然只是一个事务,只是嵌套允许感兴趣的代码块在事务成功时进行投票(无需传递事务对象),而不是你正在创建嵌套事务。这就是为什么 transactionscope 上的方法被称为 Complete 而不是 Commit。

编辑以解决来自 OP 的评论

为了得到你想要的东西,我认为你必须创建两个 TS 对象,第二个对象带有 RequiresNew,然后根据需要完成/回滚每个对象。我不知道第一笔交易是否会看到第二笔交易的变化,您必须自己进行实验,看看 TS 是否可以提供帮助。

我明白你想做什么,我并不是说你的尝试是错误的;如果这就是您的用例所需要的,那么这就是它所需要的。

但是我不认为 TS 是为这种用例设计的,我认为引用嵌套事务的文档是不幸的,因为它不是通常讨论的真正嵌套事务(例如在 TSQL 中)。

TS 专为更常见的用例而设计,其中组件 A 和 B 都执行事务性工作,A 使用 B 作为其工作的一部分,但 B 也可以独立使用。 TS 允许 B 始终是事务性的,无论是独立使用还是作为 A 工作的一部分,并且可以启动事务或重用 A(因为 A 是 UoW)而无需传递事务对象。

关于c# - .net 嵌套事务范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26665358/

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