2012-12-19 10 views
9

私は同時にDataContextオブジェクトとアクセス二つのテーブルがあるとします。私は他のテーブルにクエリをしながら最初のクエリ結果の使用を停止し、すべて同じDataContextオブジェクトを使用していない同じDataContextオブジェクトを介して同時に複数のテーブルにアクセスできますか?

using(var context = new DataContext(connectionString)) { 
    foreach(firstTableEntry in context.GetTable<FirstTable>()) { 
     switch(firstTableEntry.Type) { 
     case RequiresSecondTableAccess: 
     { 
      var secondTable = context.GetTable<SecondTable>(); 
      var items = secondTable.Where(item => item.Id = firstTableEntry.SecondId); 
      foreach(var item in items) { 
       handleItem(item); 
      } 
     } 
     default: 
      // not accessing the second table 
    } 
} 

注意時間。

このような使用は合法ですか?私はこのアプローチに何か問題があると思いますか?

答えて

3

これは、データベースエンジンにMultiple Active Recordsets (MARS)のサポートがある場合にのみ機能します。そうでない場合は、例外が生成されます。それ以外の場合は、間違いなくこれを行うことができます。

MARSをサポートしていない場合は、データベースからすべてのレコードを一度にダウンロードし、メモリ内の列挙型に変換する場合は、.AsEnumerableを使用する必要があります。

ここでanother great resourceは、Entity FrameworkでMARSを使用しているものと、使用していないもので何ができないものかを示しています。

1

Davidによってコメントされました。彼の情報に追加します... 次のようにWEB.CONFIGを参照してください。接続文字列でMARS = True

<connectionStrings> 
<add name="ContextNameXYZ" connectionString="Data Source=ServerName;Initial Catalog=DBName;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework" 
    providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
関連する問題