首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多重TransactionScope问题

多重TransactionScope问题
EN

Stack Overflow用户
提问于 2009-08-27 15:07:51
回答 2查看 8.8K关注 0票数 6

我想要创建一个事务,在子事务中写入一些数据,返回数据,然后回滚事务。

代码语言:javascript
复制
using(var transaction = new TransactionScope()) 
{
     using(var transaction = new TransactionScope()) 
     {
          // save data via LINQ / DataContext
          transaction.Complete();
     }
     // Get back for assertions
     var tempItem = // read data via LINQ / DataContext THROWS EXCEPTION
} 

但是,在阅读时,我得到了"System.Transactions.TransactionException :操作对事务状态无效“。

如何设置事务属性以避免这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-27 19:12:52

如果没有完整的堆栈跟踪,则无法调试此异常。根据上下文的不同,它有着不同的含义。通常,这意味着您正在执行事务中不应该做的事情,但是没有看到db调用或堆栈跟踪,任何人所能做的就是猜测。我所知道的一些常见原因(我肯定这绝不是全面的)包括:

  1. 访问嵌套TransactionScope中的多个数据源(即不同的连接字符串)。这将导致提升到分布式事务,如果没有运行DTC,则会失败。答案通常不是启用DTC,而是清理您的事务,或者在违反隔离级别的TransactionScope.
  2. Any操作中使用新的TransactionScope.
  3. Any异常包装其他数据访问,例如尝试读取刚刚插入/更新的行。
  4. SQL死锁;在某些情况下,事务甚至可以锁住自己,但如果应用#1,如果不是数据库中的其他错误,则将其他操作隔离到新事务中可能会导致死锁。

我肯定不知道所有可能的原因,但是如果您在代码中发布了完整的堆栈跟踪和实际的db调用,我将查看并通知您是否看到任何内容。

票数 9
EN

Stack Overflow用户

发布于 2009-08-27 15:24:01

您有两个嵌套的TransactionScope对象??

也不要尝试拦截。

http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx

我认为您会发现具体的答案是,您不能完成一个没有开始任何事情的事务,它处于无效状态。您的LINQ注释实际上有什么代码吗?一个连接真的建立起来了吗?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1341708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档