2011-09-23 112 views
3

有没有办法在没有设置事务隔离级别的LIN2SQL单一查询上使用NOLOCK?我需要将它作为更大(分布式)事务的查询部分。与LINQ到NOLOCK NOLOCK没有设置事务隔离级别

例如:

using (var txn = new TransactionScope()) 
{ 

    // query1 
    // query2 
    // query3 
} 

我想要查询1和3的变化是事务性的,但我需要NOLOCK上QUERY2,这恰好是在一个单独的分贝到另一查询。如果我重新设置QUERY2到READUNCOMMITTED事务范围,然后我得到的错误:

The transaction specified for TransactionScope has a different IsolationLevel than the value requested for the scope. Parameter name: transactionOptions.IsolationLevel

回答

0

如何使QUERY2存储过程,使用NOLOCK在SQL,并要求从LINQ2SQL?

3

它适合你吗?

using (var txn = new TransactionScope()) 
{ 

    // query1 
    using (TransactionScope txn2 = 
    new TransactionScope(TransactionScopeOption.RequiresNew), 
    new TransactionOptions() {//isolation level,timeout, etc} 
    ) 
    { 
    // query2 
     } 
    // query3 
    } 
+1

尽管没有解释,但实际上这是个问题。问题是使用环境事务时无法更改IsolationLevel。通过指定RequiresNew,您不会“加入”外部事务并尝试更改它的IsolationLevel。相反,它会使用自己的IsolationLevel(ReadUncommitted)创建一个新事务。 – CodeNaked