यह हमारे लिए बार-बार आया था। ऐसा संदेश पढ़ने के बाद, कुछ भी करने और डीबग करने के लिए सहज नहीं है।कैसे ठीक करें "EntityMemberChanged को पहले कॉलिंग एंटीटी मेम्बर चेंजिंग के बिना बुलाया गया था"
उत्तर
क्या इस खराब प्रलेखित त्रुटि कहने की कोशिश कर रहा है कि आप गलती से जिसमें ट्रैकिंग परिवर्तनअधिक परिवर्तन का कारण बनता है एक प्रणाली की स्थापना है।
जब इकाई फ्रेमवर्क ने आपकी इकाइयों में से एक पर संपत्ति बदल दी, जैसे कि पहचान आईडी अपडेट के साथ SaveChanges के दौरान, आपने कोड चलाया जो अन्य ट्रैक किए गए गुण को बदल दिया।
उदाहरण के लिए, संपत्ति है कि इकाई की रूपरेखा की स्थापना की गई थी एक घटना है, शायद INotifyPropertyChanged
,, जिसका ListChanged
ईवेंट हैंडलर यूआई में था जो शायद एक BindingSource
या कुछ बाध्यकारी सूची द्वारा सब्सक्राइब किया गया था शुरू हो रहा है और कुछ अन्य संपत्ति का एक गणना शुरू हो रहा , और परिवर्तन ट्रैकर दूसरे संपत्ति परिवर्तन का पता चला।
सरल निदान SaveChanges() कॉल पर ब्रेकपॉइंट और SaveChanges कॉल() के तुरंत बाद रखना है। जब पहला ब्रेकपॉइंट मारा जाता है, तो प्रत्येक इवेंट हैंडलर पर ब्रेकपॉइंट रखें जो संभवतः ट्रिगर हो सकता है। (BindingSources
एक-दूसरे की घटनाओं को गुणा करने के लिए कुख्यात हैं।) डीबगिंग जारी रखें। यदि SaveChanges के तुरंत बाद बिंदु के अलावा कोई ब्रेकपॉइंट मारा जाता है, तो आप जानते हैं कि समस्या कहां है।
सरल समाधान सहेजेंChanges कॉल के प्रत्येक पक्ष पर IsSaving
जैसे ध्वज सेट करना है। फिर प्रत्येक गलत व्यवहार घटना हैंडलर में, एक सरल जांच करें और डीबीसीएन्टेक्स्ट बचत की प्रक्रिया में है, तो किसी भी संस्था को संशोधित न करें।
IsSaving = true;
try
{
await db.SaveChangesAsync()
}
finally
{
IsSaving = false;
}
(एक अन्य संभावना है कि आप एक से अधिक थ्रेड — से इकाई को बदलने गया है कभी नहीं कई में परिवर्तन पर नजर शामिल: सुनिश्चित करें कि आप मामले SaveChanges में finally
का उपयोग करते हैं एक अपवाद है कि आप एक उच्च स्तर पर पकड़ फेंकता धागे!)
मेरे पास एक ही समस्या थी। मैंने INotifyPropertyChanged ईवेंट से वायर्ड किया था जिसने SaveChanges() कॉल के दौरान किसी संपत्ति को बदलने की संभावना बनाई थी। मुझे लगता है कि dbContext.SaveChanges(), निकालें() निष्पादित करते समय आपके द्वारा ट्रैक की गई इकाइयों के ईवेंट हैंडलर को अनदेखा करना बेहतर तरीका है।
अनवरत अक्सर सबसे सुरक्षित और हल्का विकल्प होगा। हालांकि, हमारे लिए एक ऐसा मामला है जहां परिवर्तन के बारे में सूचित किया जाना महत्वपूर्ण है, भले ही हम उस समय के दौरान इकाई फ्रेमवर्क-दृश्य गुणों को सेट नहीं कर रहे हों। – jnm2
मैं इस त्रुटि के साथ अपने अनुभव की व्याख्या करूंगा, उम्मीद करता हूं कि यह किसी की मदद कर सकता है। और सुंदर स्पष्टीकरण के लिए jnm2 के लिए धन्यवाद।
मैं चालान और रसीद संस्थाओं, और InvoiceViewModel था। Thie ViewModel चालान संपत्ति में सब्सक्राइब किया गया था, जिसके अंदर यह उठा रहा था CanExecuteChanged ईवेंट।
मैं नेविगेशन संपत्ति और कहा जाता SaveChanges() है, जो Invoice.ReceiptID संपत्ति बदल उठाया और ViewModel, जो बारी में CanExecuteChanged घटनाओं के सभी प्रकार उठाया पर OnPropertyChanged ईवेंट हैंडलर चालू होने वाले चालान करने के लिए रसीद गयी।
समस्या था कि कैन commandname में से एक निष्पादित तरीकों Context.ChangeTracker.HasChanges() जो अंततः एक अपवाद फेंक दिया बुला रहा था।
मैंने इसे कैसे ठीक किया? मैंने jnm2 का पालन किया, मैंने आईएसविंग के साथ वीएम को ध्वजांकित किया और ऑनप्रॉपर्टी चेंज इवेंट हैंडलर के अंदर ध्वज के लिए चेक किया।
एक बार फिर, धन्यवाद jnm2, और उम्मीद है कि किसी को भी यह सहायक मिल जाएगा।
- 1. फ़ंक्शन को कितनी बार बुलाया गया था, एफपी तरीका
- 2. अस्थायी से पहले बुलाया गया विनाशक
- 3. कॉपी असाइनमेंट ऑपरेटर को कब बुलाया गया था?
- 4. CLBeaconRegion ने कॉलिंग को नहीं बुलाया
- 5. क्यूटी आईसीयू समर्थन के बिना बनाया गया था, वेबकिट अक्षम कर दिया गया था। VS2012
- 6. मॉड्यूल कैसे प्राप्त करें जिससे वर्तमान में निष्पादन कार्य को बुलाया गया था?
- 7. कॉलिंग के बिना गल्प-अधिसूचना कॉलिंग()
- 8. wether ob_start() को कैसे निर्धारित करें; पहले से ही बुलाया गया है
- 9. मॉकिटो - यह सत्यापित करने के लिए कि एक नकली को कभी भी नहीं बुलाया गया था
- 10. ऑटोमैपर का उपयोग कैसे करें .मेम्बर?
- 11. बिना नॉगेट के एंटीटी फ्रेमवर्क 4.2 कैसे प्राप्त करें?
- 12. डेटाफ्रेम कन्स्ट्रक्टर ठीक से नहीं बुलाया गया है! त्रुटि
- 13. Google.com को कैसे बनाया गया था?
- 14. मॉकिटो; सत्यापन विधि को सूची के साथ बुलाया गया था, सूची
- 15. Android पर OpenGLES - IllegalStateException: setRenderer को इस उदाहरण के लिए पहले से ही बुलाया गया है
- 16. बूटस्ट्रैप तालिका के पहले कॉलम को ठीक करें
- 17. इकाइयों को लोड किया गया था या हटा दिया गया था क्योंकि इकाइयों को लोड किया गया था
- 18. ऑब्जेक्ट सिंक्रनाइज़ेशन विधि को कोड के एक सिंक्रनाइज़ किए गए ब्लॉक से बुलाया गया था। Mutex.Release()
- 19. सिंक्रनाइज़ेशन लॉकएक्सप्शन (ऑब्जेक्ट सिंक्रनाइज़ेशन विधि को कोड के असीमित ब्लॉक से बुलाया गया था।) लॉक
- 20. आरवीएम अक्षम करें या रूबी का उपयोग करें जो आरवीएम के बिना स्थापित किया गया था?
- 21. एंटीटी फ्रेमवर्क कोड के साथ एकल ऑब्जेक्ट्स को सहेजना पहले
- 22. सूचीफ्रैगमेंट ऑनप्रेयरऑप्शनमेनू ने पहले सेक्रेट किया था। क्यों और कैसे ठीक/बाईपास?
- 23. जस्ट-इन-टाइम डीबगर को आवश्यक सुरक्षा अनुमति के बिना लॉन्च किया गया था
- 24. इकाई फ्रेमवर्क कोड में कॉलिंग कॉलम पहले
- 25. java.lang.IllegalStateException: getReader() को पहले से ही इस अनुरोध के लिए बुलाया गया है
- 26. पृष्ठ से पहले इवेंट कॉलिंग
- 27. beforeEachProviders (RC4 पर हटा दिया गया) को कैसे ठीक करें
- 28. एंटीटी फ्रेमवर्क कोड पहले सम्मिलित करें विधि हुक
- 29. "TypeInitializationException था बिना क्रिया"
- 30. सत्यापित करें कि ऑब्जेक्ट पहले से ही एंटीटी फ्रेमवर्क संदर्भ
सुंदर स्पष्टीकरण, बहुत बहुत धन्यवाद! – Dan
दोनों प्रश्न और इस तरह के विस्तृत उत्तर पोस्ट करने के लिए धन्यवाद! – Hannish