2011-09-23 1 views
3

Transaction IsolationLevelを設定せずにLIN2SQLの単一クエリでNOLOCKを使用する方法はありますか?私はより大きな(分散した)トランザクションのクエリ部分としてこれを行う必要があります。例えばTransaction IsolationLevelを設定せずにLinq to SQLを使用するNOLOCK

using (var txn = new TransactionScope()) 
{ 

    // query1 
    // query2 
    // query3 
} 

私は、クエリ1と3の変更がトランザクションになりたいが、私は他のクエリとは別のデシベルであることを起こるQUERY2にNOLOCKが必要です。私はREADUNCOMMITTEDにQUERY2のトランザクションスコープを再設定した場合、私はエラーを取得する:

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

答えて

0

どのようにSQLでNOLOCKで、ストアドプロシージャをQUERY2作り、そして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