9

オブジェクトがDataContextあり、同時に2つのテーブルにアクセスするとします。

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
     }
}

他のテーブルにクエリを実行している間、最初のクエリ結果の使用を停止せず、DataContext常に同じオブジェクトを使用することに注意してください。

そのような使用法は合法ですか?このアプローチで何か問題が発生する可能性がありますか?

4

2 に答える 2

3

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

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

Entity FrameworkでMARSを使用するものと、MARSがない場合に実行できないことに関するもう1つの優れたリソースを次に示します。

于 2012-12-19T12:29:37.273 に答える
1

デビッドがコメントしたように。私は彼の情報に追加します...次のように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>
于 2012-12-19T13:24:32.947 に答える