我想要创建一个事务,在子事务中写入一些数据,返回数据,然后回滚事务。
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 :操作对事务状态无效“。
如何设置事务属性以避免这种情况?
发布于 2009-08-27 19:12:52
如果没有完整的堆栈跟踪,则无法调试此异常。根据上下文的不同,它有着不同的含义。通常,这意味着您正在执行事务中不应该做的事情,但是没有看到db调用或堆栈跟踪,任何人所能做的就是猜测。我所知道的一些常见原因(我肯定这绝不是全面的)包括:
TransactionScope中的多个数据源(即不同的连接字符串)。这将导致提升到分布式事务,如果没有运行DTC,则会失败。答案通常不是启用DTC,而是清理您的事务,或者在违反隔离级别的TransactionScope.TransactionScope.我肯定不知道所有可能的原因,但是如果您在代码中发布了完整的堆栈跟踪和实际的db调用,我将查看并通知您是否看到任何内容。
发布于 2009-08-27 15:24:01
您有两个嵌套的TransactionScope对象??
也不要尝试拦截。
http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx
我认为您会发现具体的答案是,您不能完成一个没有开始任何事情的事务,它处于无效状态。您的LINQ注释实际上有什么代码吗?一个连接真的建立起来了吗?
https://stackoverflow.com/questions/1341708
复制相似问题