.NET 中的嵌套事务

2024-04-30

我怎样才能执行与此等效的操作?我的理解是,这对于 TransactionScopes 来说是不可能的 https://stackoverflow.com/questions/2741988/nested-child-transactionscope-rollback但我想以其他方式完成同等的任务:

业务逻辑类:

public bool Bar()
{
  try
  {
    using (var tsWork = new TransactionScope())
    {
      ComplicatedDataImportCode(somedata);
      FlagRecordInDatabaseAsImported(); // this is the same record that's modified in the catch
      tsWork.Complete();
      return true;
    }
    catch (DuplicateDataException err)
    {
      // if we got here, the above transaction should have rolled back,
      // so take that same record in the database and update it to "Duplicate".
      FlagSameRecordInDatabaseAsDuplicate(err.Message);
    }

    return false;
}

现在这工作正常,直到我将所有这些封装在事务中(可能是我想在执行断言后回滚的集成测试)。

简单的测试来证明我的观点:

public void CanTest()
{
  // Arrange
  var foo = new Foo();

  using (var ts = new TransactionScope())
  {
    // Act
    var success = foo.Bar();

    // Assert
    if (success)
    {
      Assert.That(SomethingThatTestsThatTheDataWasImported);
    }
    else
    {
      Assert.That(SomethingThatTestsThatTheRecordWasMarkedAsDuplicate);
    }

    // Now that we have been able to perform our Asserts, rollback.

  }
}

最终,代码中Foo.Bar()可以修改以适应解决方案,但是,代码ComplicatedDataImportCode()无法针对此解决方案进行修改,因此这是我真正需要确保在故障场景中正确回滚的。

再次,根据我在本问题开头引用的帖子,我明白 TransactionScopes 不能用于执行此操作。我在这里使用 TransactionScopes 来指示我想要做什么,并且正在寻找实现此功能的最佳替代方法。


是不是您正在使用的 DBMS 必须支持这一点?

例如,SQL Server 并不真正支持嵌套事务,但是,您可以使用 SQL Server保存点 http://msdn.microsoft.com/en-us/library/ms378414%28v=sql.90%29.aspx.

一篇文章 http://fgheysels.blogspot.com/2006/11/nested-transactions-in-sql-server.html几年前我在博客上写过。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 中的嵌套事务 的相关文章

随机推荐

  • 通过 nginx 入口控制器进行基本身份验证

    我正在使用 nginx 入口控制器 https kubernetes github io ingress nginx deploy https kubernetes github io ingress nginx deploy 在 AWS
  • C++ win32 控制台中的颜色

    std cout lt lt blblabla done lt lt std endl 是否有可能使 done 采用另一种颜色 并且可能是大胆的 我使用的是 Windows 7 这取决于您使用的操作系统 如果您使用的是您想要的 Window
  • Aurelia:创建嵌套/多级导航菜单的简单方法

    我需要创建一个多级导航菜单 菜单的内容根据用户的不同而不同 我计划通过一个以 JSON 形式返回数据的服务来提取可包含子项数组的导航项集合 我见过的每个导航 路由示例都使用静态路由或单级菜单 我已经阅读了一些有关子路由的内容 但这似乎不是我
  • 基于我的 C# 类生成 xml 文件

    我有 xml 文件 每次都需要根据新客户的要求进行更新 大多数时候 xml 不正确是因为手动更新了 xml 文件 我正在考虑编写一个提供适当验证的程序 网络 Windows 并根据 ui 的输入 我将创建 xml 文件 下面是我的示例 xm
  • 内联网应用程序是否需要 SSL 证书

    我的应用程序将使用 MSI 安装程序部署到用户的服务器 并且期望它将作为 Intranet 应用程序在其安全网络上运行 但是 由于我在整个网站上使用 HTTPS 我想知道如何获得有效的证书 我已经使用 MakeCert 生成了一个开发版本
  • BLE 广播帧和 BLE 信标帧有区别吗

    我正在接收EVT LE ADVERTISING REPORT来自 HCI 套接字 我想区分 BLE 信标和普通 BLE 设备 解析设备名称等 我有点困惑是否所有 BLE 设备都会发出信标或者它们是不同的 如果不同 那么它们的数据包格式如何
  • 按第二个值对二维数组进行排序

    好吧 假设我有一个像 z 1 d 3 e 2 这样的数组 如何按每个组成数组的第二个元素对该数组进行排序 这样我的数组就会如下所示 z 1 e 2 d 3 arr z 1 d 3 e 2 arr sort a b a 1 lt gt b 1
  • WCF 中的实例停用是什么?

    我最近接触到这个词Instance Deactivation a 那是什么 b 我们需要这个做什么 c 它在什么情况下有用 我正在寻找一个易于理解的简单答案 如果可能的话 可以使用一些伪代码 Thanks 当调用 WCF 方法时 它会传递给
  • “此时元素 li 上不允许使用属性 aria-expanded”

    我有以下代码 从这里 https www w3 org WAI tutorials menus examples appmenu div ul li File ul li New li ul li ul div
  • useSelector 常量在调度后不更新

    这里有一个代码沙盒 https codesandbox io s competent moon 9ehen getIDs 更新cells 然后需要initializeCells 但是 此更改在分派操作后不会反映出来 尽管如此 我还是可以看到
  • Javascript正则表达式替换多个组

    我正在尝试根据这样的正则表达式替换多个匹配的组 var paramRegex s w s w s w s s i should match group1 group2 group3 var emptyParam emptyParam rep
  • 为页面上的所有 AJAX 请求添加“钩子”

    我想知道是否可以 挂钩 每个 AJAX 请求 无论是即将发送的请求 还是事件上的请求 并执行操作 此时 我假设页面上还有其他第三方脚本 其中一些可能使用 jQuery 而另一些则不使用 这可能吗 注意 接受的答案不会产生实际的响应 因为它被
  • 如何获取日期时间格式的 Win32_OperatingSystem.LastBootUpTime

    我一直在尝试使用 Win32 OperatingSystem 类 WMI 获取 LastBootUpTime HRESULT hr pEnumerator gt Next WBEM INFINITE 1 pclsObj uReturn if
  • 错误org.springframework.beans.factory.BeanCreationException:创建类路径资源中定义的名为“entityManagerFactory”的bean时出错

    我想将我的 java CRUD 应用程序与红色节点连接 但当我运行 Java 应用程序时 我总是收到此错误 我试图解决它 但我不能 这是错误 2022 05 10 11 33 43 959 INFO 12192 restartedMain
  • Knockout ObservableArray 不更新 HTML Foreach

    所以我有一个可以正常工作的 observablearray 但 UI 没有更新 我读过很多人遇到这种类型的问题 但我没有看到 所以 HTML 是 tbody tr td span class label label success Yup
  • 包含对 char(13) 不满意

    为什么不会SSMS为我处理这个脚本 DECLARE containsReturn AS CHAR 500 email protected cdn cgi l email protection email protected cdn cgi
  • 在 OSX 10.6 中以编程方式与连接的 iOS/iPod 进行交互

    我正在尝试开发一个简单的菜单栏应用程序 让我可以直观地看到所连接的 iPhone iPad 的充电状态 而无需启动 iTunes 经过长时间的搜索 我无法断定 Snow Leopard API 是否可以实现这一点 我的搜索引导我找到了一个在
  • 如何在 RHEL 上更新 git 版本?

    我刚刚在 GCP 上创建了一个新的 RHEL 虚拟机来在上面运行一些 Kubernetes 它上面没有安装任何 git I used yum包管理器在其上安装git 但它没有安装最新版本的git 当前版本 2 38 0 2022 年 10
  • MATLAB:涉及大数的计算

    如何在 MATLAB 中执行涉及大量数字的计算 举一个简单的例子 任意精度计算器将显示 1 120 132 370 260 约为 1 56 但 MATLAB 无法执行此类计算 power 120 132 factorial 370 fact
  • .NET 中的嵌套事务

    我怎样才能执行与此等效的操作 我的理解是 这对于 TransactionScopes 来说是不可能的 https stackoverflow com questions 2741988 nested child transactionsco