c# – 多个TransactionScope问题
发布时间:2020-12-15 18:23:07 所属栏目:百科 来源:网络整理
导读:我想创建一个事务,在子事务中写入一些数据,读回数据,然后回滚事务. using(var transaction = new TransactionScope()) { using(var transaction = new TransactionScope()) { // save data via LINQ / DataContext transaction.Complete(); } // Get back fo
我想创建一个事务,在子事务中写入一些数据,读回数据,然后回滚事务.
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:该操作对于事务的状态无效.” 我应该如何设置事务属性以避免这种情况? 解决方法
如果没有完整的堆栈跟踪,则无法调试此异常.根据具体情况,它有不同的含义.通常这意味着你正在做一些你不应该在事务中做的事情,但是没有看到db调用或堆栈跟踪所有人都可以做的就是猜测.我所知道的一些常见原因(我认为这绝不是全面的)包括:
>在嵌套的TransactionScope中访问多个数据源(即不同的连接字符串).这会导致升级到分布式事务,如果您没有运行DTC,它将失败.答案通常不是启用DTC,而是清理事务或使用新的TransactionScope包装其他数据访问(TransactionOptions.RequiresNew). 我绝对不知道每一个可能的原因,但是如果你在你的代码中发布完整的堆栈跟踪和实际的db调用,我会看看并告诉你我是否看到了什么. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |