ईएफ 4.1 आरसी। डीबीसीएन्टेक्स्ट से एक इकाई को जोड़ा/संलग्न करने के बाद मैं कुछ कोड चलाने के लिए चाहता हूं। इसके लिए कोई घटना है (मुझे एक नहीं मिल रहा है)। असल में मैं यह जांचना चाहता हूं कि जोड़ा/संलग्न इकाई एक निश्चित इंटरफेस का है और यदि ऐसा है, तो इसके साथ कुछ सामान करें। धन्यवाद!डीबीसीएन्टेक्स्ट जोड़ा गया/संलग्न घटना?
उत्तर
दुर्भाग्य से ऐसी कोई घटनाएं उपलब्ध नहीं हैं और ऐसी घटनाओं को जोड़ने के लिए कोई विस्तार बिंदु नहीं है। यह मेरी सबसे बड़ी ईएफ विफलता में से एक है। विस्तारशीलता = शून्य।
केवल एक चीज आप कर सकते हैं SaveChanges
ओवरराइड और base.SaveChanges
उपयोग ChangeTracker
को क्रियान्वित करने के लिए अपने प्रकार के सभी संलग्न और कहा कि संस्थाओं और अपने तर्क पर अमल करने से पहले है। लेकिन यह संदर्भ में किसी इकाई को जोड़ने या जोड़ने के दौरान एक ईवेंट ट्रिगर करने जैसा नहीं है।
बमर ......... –
मैं मूल प्रश्न में संकेत के अनुसार v 4.1 के खिलाफ परीक्षण नहीं कर रहा हूं, लेकिन @ केवीरवॉल्ड का जवाब बस ठीक है! EF5 में ऑब्जेक्टस्टेट मैनेजर के उपयोग का परीक्षण किया और यह बहुत अच्छा काम करता है। – BenSwayne
@ बेन्सवेन: हां। इसे एक उत्तर के रूप में चिह्नित किया जाना चाहिए। –
संदर्भ में परिवर्तनों को ट्रैक करने के लिए आप ObjectStateManager
की ObjectStateManagerChanged
ईवेंट का उपयोग कर सकते हैं। ObjectStateManager
पहुंचने के लिए, आप की तरह
var contextAdapter = ((IObjectContextAdapter)dbcontext);
contextAdapter.ObjectContext
.ObjectStateManager
.ObjectStateManagerChanged += ObjectStateManagerChanged;
DbContext कास्टिंग एक बार जब आप घटना मिला के लिए IObjectContextAdapter
उपयोग करने के लिए है, यह जोड़ने या ObjectStateManager
लिए संस्थाओं को हटाने के द्वारा हर बार संग्रह बदल जाती है आग। इकाई की स्थिति को ट्रैक करने के लिए, ObjectStateManager
के GetObjectStateEntry()
का उपयोग करें और CollectionChangeEventArgs
परम के Element
का उपयोग करें।
CollectionChangeEventArgs
के दोनों राज्यों और संयोजन ObjectStateEntry
आप ट्रैक कर सकते हैं, क्या हो रहा है ....
यह अच्छा लगता है, हालांकि मेरे परीक्षण में, ऑब्जेक्टस्टेट मैनेजर चेंज को वास्तव में डेटाबेस कहा जाता है _before_ डेटाबेस में कुछ भी सहेजा जाता है (जब आप एड() को कॉल करते हैं तो इसे उत्सर्जित किया जाता है, और ऑब्जेक्ट कॉन्टेक्स्ट। सेविंग चेंज कुछ हद तक सहेजने से पहले बुलाया जाता है। मुझे कुछ भी नहीं मिला है जिसे _after_ कहा जाता है, परिवर्तन सहेजे जाते हैं ... (ईएफ 6 में) – Josh
@ जोश जो आपके स्वयं के उदाहरण प्रदान करने का एक कारण है। ईएफ के चारों ओर "काम की इकाई" रैपर - यह आपको परिवर्तनों को सहेजते समय प्रबंधित करने की अनुमति देता है, बनाम जब प्रतिबद्ध कहा जाता है (यदि आपने अपना लेनदेन खोला है)। हालांकि, मेरी परिस्थितियों के लिए, राज्य ने प्रबंधक को बदल दिया जो वास्तव में मुझे प्रदान करने के लिए दिखता है। – Nathan
प्रासंगिक DbSet के स्थानीय संपत्ति (ObservableCollection) के लिए CollectionChanged घटना संभाल।
जोड़े गए/संलग्न इकाई ऑब्जेक्ट की DbEntityEntry के राज्य को क्रमशः जोड़ा/संलग्न के लिए जोड़ा या unmodified के लिए जांचें।
DbSet.Local संपत्ति: http://msdn.microsoft.com/en-us/library/gg696248(v=vs.103).aspx
DbContext.Entry विधि: http://msdn.microsoft.com/en-us/library/gg696578(v=vs.103).aspx
ध्यान दें कि यह काम करता है और, मेरे लिए उपयोग करने का एक शानदार तरीका होता, हालांकि यह घटना को उत्सर्जित करता है _before_ इकाई वास्तव में डेटाबेस में सहेजी जाती है, इसलिए कुछ गलत होने पर यह "झूठी सकारात्मक" ट्रिगर कर सकता है। – Josh
(उपरोक्त ईएफ 6 में है) – Josh
प्रश्न 'डीबीकॉन्टेक्स्ट' से जोड़े/संलग्न होने के बाद एक निश्चित प्रकार की प्रसंस्करण इकाइयों के बारे में पूछा गया। यदि आप सफलतापूर्वक डीबी में सहेजे जाने के बाद आगे प्रसंस्करण करना चाहते हैं, तो 'डीबी कॉन्टेक्स्ट। सेव चेंज' विधि को ओवरराइड करें और 'बेस। सेव चेंज' विधि को कॉल करने के बाद अपने तर्क को कार्यान्वित करें। – Moho
- 1. डीबीसीएन्टेक्स्ट
- 2. ईएफ कोडफर्स्ट: डीबीसीएन्टेक्स्ट
- 3. ईएफ 4.1 - डीबीसीएन्टेक्स्ट एसक्ल्यूक्वियर और
- 4. ListView आइटम जोड़ा गया ईवेंट
- 5. घटना
- 6. घटना
- 7. साइटकोर आइटम: बनाया बनाम आइटम: जोड़ा
- 8. कैसे जोड़ा डेटा के साथ एक घटना प्रेषण करने के लिए - AS3
- 9. डीबीसीएन्टेक्स्ट के बाहर संशोधित इकाइयों को कैसे अपडेट करें?
- 10. एएसपी.नेट एमवीसी 3 ईएफ कोडफर्स्ट - डीबीसीएन्टेक्स्ट आइटम संपादन
- 11. विलुप्त घटना वी टिक घटना?
- 12. सी # कस्टम घटना संचालकों
- 13. जोड़ा तालिका पंक्तियों
- 14. jqGrid नई जोड़ा पंक्ति
- 15. Git - जोड़ा त्यागने फ़ाइलों
- 16. AjaxFileUpload OnUploadComplete घटना
- 17. AuthenticateRequest घटना
- 18. "बैकबटन" घटना
- 19. डोम घटना
- 20. OnTextChanged घटना
- 21. ब्राउज़र घटना()
- 22. सी # घटना
- 23. कैसे घटना
- 24. OnActionExecuting घटना
- 25. onkeyup घटना
- 26. घटना प्रचार
- 27. घटना-हैंडलर
- 28. घटना/थामने
- 29. घटना दर्शक
- 30. jQuery घटना
रूप Ladislav कहा, वहाँ कोई तानाना है। यदि आप कुछ और अधिक शक्तिशाली (और अधिक जटिल नहीं हैं, तो आप सीखने के इच्छुक हैं) की तलाश कर रहे हैं, तो मैं एनएचबीर्नेट की सलाह देता हूं। यह वही करता है जो आप चाहते हैं और अधिक। –