【问题标题】:TransactionScope with several transactions insideTransactionScope 里面有几个事务
【发布时间】:2015-03-09 21:02:24
【问题描述】:

我尝试以这种方式使用 TransactionScope:

using (TransactionScope ts = new TransactionScope())
  {
     DAL.delete();
     DAL.create();           
     ts.Complete();
  }

我有独立的 DAL(数据访问层)模块来执行数据库操作。像 delete()、create() 这样的每个操作都是原子的,即它们都是通过调用提交的。

我已经尝试过这段代码,以便将这两个操作包装在一起作为一个事务。而且不管我写的是不是 ts.Complete();,它们都被提交到数据库中,不会发生回滚。

在这种情况下我该怎么办?谢谢。

【问题讨论】:

  • 您是否尝试过与 ts.Rollback() 相同的操作?
  • 您使用的是什么数据库和数据访问框架?它是否支持事务范围?
  • 如果您使用的是Sql Server,请咨询此处的MSDN TransactionScope Class
  • 没有回滚功能,如果事情没有按预期进行就不要完成。
  • 就像我提到的, ts.Complete() 不会影响结果。即我找不到回滚的方法。正如文档所说,如果我们不提供 ts.Complete() 操作将自动回滚。主要问题是如何控制小交易的交易。

标签: c# .net transactions transactionscope


【解决方案1】:

TS 正在创建一个环境事务,您的 DAL 层将自动获取该事务。您的代码暗示您希望将删除和创建视为原子操作。如果您希望它们独立,请在第一个 TS 块之后创建另一个 TS 块并将您的 create 语句移到那里。

如果你想回滚,你需要在没有调用 Complete 的情况下离开 using 块,这通常是因为你的 DAL 方法之一引发了异常。

【讨论】:

    猜你喜欢
    • 2020-04-24
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多