2012-12-19 10 views
9

मान लीजिए मैं एक ही समय में एक 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 
    } 
} 

ध्यान दें कि मैं जबकि अन्य तालिका में क्वेरी बनाने की पहली क्वेरी परिणामों का उपयोग बंद नहीं करते हैं और सभी एक ही DataContext ऑब्जेक्ट का उपयोग समय।

क्या ऐसा उपयोग कानूनी है? क्या मुझे इस दृष्टिकोण के साथ किसी भी समस्या की उम्मीद करनी चाहिए?

उत्तर

3

यह केवल तभी काम करेगा यदि आपके डेटाबेस इंजन में Multiple Active Recordsets (MARS) के लिए समर्थन है। यदि नहीं, तो आप एक अपवाद उत्पन्न करेंगे। अन्यथा, आप निश्चित रूप से ऐसा कर सकते हैं।

यदि आपके पास एमएआरएस समर्थन नहीं है, तो आपको एक समय में डेटाबेस से सभी रिकॉर्ड्स डाउनलोड करने और एक मेमोरी में गणना करने के लिए .AsEnumerable का उपयोग करने की आवश्यकता होगी।

यहां एंटीटी फ्रेमवर्क में एमएआरएस का उपयोग करने वाले another great resource और यदि आपके पास नहीं है तो आप क्या नहीं कर सकते हैं।

1

जैसा कि डेविड ने टिप्पणी की थी। मैं उनकी जानकारी में जोड़ूंगा ... निम्नानुसार WEB.CONFIG देखें, MARS = कनेक्शन स्ट्रिंग में सही

<connectionStrings> 
<add name="ContextNameXYZ" connectionString="Data Source=ServerName;Initial Catalog=DBName;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework" 
    providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
संबंधित मुद्दे