PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgresql और ado.net इकाई डेटा मॉडल के लिए MultipleActiveResultSets

एकाधिक सक्रिय परिणाम सेट (एमएआरएस) SQL सर्वर 2005 में पेश की गई एक सुविधा है और पोस्टग्रेज़ जैसे अन्य डेटाबेस सिस्टम में उपलब्ध नहीं है, इसलिए आप इसे कनेक्शन स्ट्रिंग में चालू नहीं कर पाएंगे।

आप जिस त्रुटि का सामना कर रहे हैं वह एक खुले डेटा रीडर पर दो प्रश्नों को करने का प्रयास करने का परिणाम है। यानी एंटिटी फ्रेमवर्क का उपयोग करते समय यह आमतौर पर तब होता है जब आपके पास आलसी लोड हो रहा हो चालू किया गया है और आलसी गुण उसी पाठक में लोड किए जाते हैं जैसे माता-पिता एंटाइट करते हैं। उदाहरण के लिए इससे मिलता-जुलता कोड यह त्रुटि उत्पन्न कर सकता है:

var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
    Console.WriteLine(user.Address.StreetName);
}

पहली पंक्ति में कोई डेटा नहीं लाया जाता है क्योंकि हमने केवल एक लिंक क्वेरी तैयार की है। जब हम foreach . शुरू करते हैं एक DataReader खोला गया है और हमारी शर्तों को पूरा करने वाले उपयोगकर्ताओं के संग्रह से पूछताछ की जाती है लेकिन पाठक बंद नहीं होता है। फिर foreach . के अंदर हम उपयोगकर्ता की पता संपत्ति तक पहुंचते हैं जो आलसी लोड होता है। यह आलसी लोड उसी खुले DataReader . पर क्वेरी निष्पादन का कारण बनता है और वह तब होता है जब अपवाद होता है। अगर मैं त्रुटि से छुटकारा पाना चाहता हूं तो मैं बस एक ToList() जोड़ सकता हूं (या कुछ भी जो क्वेरी को निष्पादित करने का कारण बनता है) इस तरह की पंक्ति के अंत तक:

var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();

आशा है कि यह आपकी मदद करेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेस अनुक्रम द्वारा उत्पन्न संख्याओं में छेद/अंतराल को ठीक करना

  2. तिथियों की एक श्रृंखला के लिए निकटतम रिकॉर्ड

  3. दूसरे कॉलम पर आधारित PostgreSQL अनुक्रम

  4. Ecto Fragments . का उपयोग करके टाइमस्टैम्प में अंतराल जोड़ें

  5. मॉडलिंग उपयोगकर्ता, समूह और सदस्यता डेटाबेस टेबल