【问题标题】:TransactionScope commits updates without calling .Complete() but not insertsTransactionScope 提交更新而不调用 .Complete() 但不插入
【发布时间】:2013-01-03 16:41:21
【问题描述】:

我有一个围绕一些功能的事务范围。这些函数每个都执行插入或更新的数据库调用。

 using (var ts = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
            {
                IsolationLevel =
                    IsolationLevel.Serializable,
                Timeout = new TimeSpan(0, 0, 15, 0)
            }))
            {
                    DoStuff(arg!, arg2);
                    ts.Complete(); //This had to be added to commit the changes for inserts (updates worked), otherwise data was being rolled back
            }

使用ts.Complete();,插入和更新被提交到数据库,而不仅仅是更新。有人可以解释一下原因吗?

【问题讨论】:

  • 我也遇到了类似的问题,请问您是如何解决提交更改而不调用 Complete() 的问题的?

标签: c# .net transactions


【解决方案1】:

这表明您的更新不是交易的一部分。这可能意味着:

  • 更新是在您启动事务范围之前已存在的连接上完成的
  • 存在显式嵌套的新事务或无事务
  • 独角兽

确认:没有完成,事务中的任何内容都不会被提交

【讨论】:

  • 如果没有提交 Complete() 更新,则不会提交插入。插入和更新数据都调用相同的存储过程(传入 Sql 表类型并根据标志确定是插入还是更新数据)
  • @Ben 我们需要看看 DoStuff。按照这个答案,我对“如何”的想法仍然存在
  • 不过,关于第一个原因,连接之前可以存在,但之后必须打开。
猜你喜欢
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多