डिबगिंग और खोज के तीन घंटों के बाद, मुझे उम्मीद है कि यहां किसी का जवाब है। इकाई फ्रेमवर्क (MySQL का उपयोग करके) निम्न अपवाद फेंकता है यदि मैं उत्तराधिकार में निम्न फ़ंक्शन को तुरंत कॉल करता हूं (उदा। < 0.1 सेकंड अलग)।इकाई फ्रेमवर्क "अप्रत्याशित कनेक्शन राज्य" अपवाद
सिस्टम। अविश्वसनीय अपवाद अपवाद: अप्रत्याशित कनेक्शन स्थिति। एक रैपिंग प्रदाता का उपयोग करते समय सुनिश्चित करें कि स्टेट चेंज इवेंट लपेटा डीबीकनेक्शन पर लागू किया गया है।
हालांकि, कभी-कभी फ़ंक्शन बिना किसी समस्या के काम करता है। अपवाद पहले ToList()
फोन पर फेंक दिया जाता है:
void InsertOrUpdateMaterials(List<Material> materials)
{
var id = GetUserId();
var materialIds = materials.Select(x => x.MaterialId).ToList();
// Remove old materials from DB
var oldMaterials = Db.Materials.Where(p => p.CreatedBy == id &&
materialIds.Contains(p.MaterialId)).ToList(); // exception
Db.Materials.RemoveRange(oldMaterials);
Db.SaveChanges();
// Replace previous materials with the new ones in list
Db.Materials.AddRange(materials);
Db.SaveChanges();
}
अजीब तरह, यह त्रुटि विकास सर्वर पर कभी नहीं हुआ, इसलिए मैं कोई लाभ नहीं हुआ संभव विन्यास मुद्दों में देखा।
कभी कभी, इकाई की रूपरेखा फेंकता है:
System.Data.Entity.Core.EntityCommandExecutionException: वहाँ पहले से ही इस कनेक्शन जो पहले बंद होना चाहिए के साथ जुड़े किसी खुले DataReader है।
फिर से ToList()
कॉल पर इंगित करता है। कोई विचार?
यह देखना उपयोगी होगा कि 'डीबी' कहां से आ रहा है। मेरा अनुमान है कि यह वास्तव में सत्य बता रहा है - डीबी पर प्रारंभिक कनेक्शन खोलने के बीच, और आप 'ToList' निष्पादित करते हैं (आपको यहां अपवाद मिलता है क्योंकि यह तब होता है जब क्वेरी डेटाबेस के विरुद्ध "भौतिक" होती है) कनेक्शन की स्थिति बदल गया है (बंद, आदि)। ईएफ संकेत दे रहा है कि आपको इसे संभालने के लिए 'स्टेट चेंज' को संभालना चाहिए (उदाहरण को फिर से खोलना या जो भी हो) –
आपकी टिप्पणी ने मुझे समाधान ढूंढने में मदद की! धन्यवाद महोदय!! मैंने देखा कि 'डीबी' कहाँ से आ रहा था, और संदर्भ कैश किया जा रहा था। मैंने इसे हर बार एक नया संदर्भ शुरू किया और समस्या हल हो गई। वास्तव में आश्चर्य की बात है कि मैंने उस पर्ची को कैसे छोड़ दिया। – arao6
@ arao6 देखभाल एक और विस्तृत उत्तर लिखने के लिए? FYI आप StackOverflow में अपने स्वयं के प्रश्न का उत्तर लिख सकते हैं। और, एफडब्ल्यूआईडब्ल्यू, मैं शायद इसे ऊपर उठाऊंगा :) – knocte