2011-12-31 12 views
5

क्या ObjectContext परिवर्तन वास्तव में किए जाने पर पता लगाने का कोई अच्छा तरीका है?इकाई फ्रेमवर्क 4: सफल सहेजने पर ऑब्जेक्ट कॉन्टेक्स्ट इवेंट

SavingChanges डेटा स्टोर पर जाने से पहले होता है लेकिन मुझे यह जानने का भी एक तरीका चाहिए कि वास्तव में उन परिवर्तनों में परिवर्तन किया गया है या नहीं।

अग्रिम धन्यवाद जॉन

अद्यतन:

क्या मैं एक कोड पहले DbContext है। इसे गतिशील डेटा में खिलाया जाता है, जैसा कि मैंने पाया है कि डीबीकॉन्टेक्स्ट के आंतरिक ऑब्जेक्ट कॉन्टेक्स्ट का उपयोग करता है (जिस पर IObjectContextAdapter को कास्टिंग करते समय मुझे एक्सेस है)। Dbcontext की SaveChanges को नहीं कहा जाता है, ऑब्जेक्ट कॉन्टेक्स्ट के SaveChanges का उपयोग इसके बजाय किया जाता है। मैं बस इतना करना चाहता हूं कि सहेजने के बाद अधिसूचित किया जाए (यानी ईवेंट सहेजे गए चेंज) ताकि मैं अपने कैश को अमान्य कर सकूं।

+0

यदि कोई अपवाद नहीं है तो उन परिवर्तनों को स्वीकार किया गया था। –

+0

मैं SaveChanges() को कॉल नहीं कर रहा हूं। SaveChanges() के संभावित कॉलर्स का एक गुच्छा है, इसलिए उन सभी को जाने के बजाय (यदि यह भी संभव है) और उन्हें संपादित करने के बजाय मुझे SaveChanges() के बाद बुलाया जा सकता है, मैं उम्मीद कर रहा था कि मैं इसे डीबीकॉन्टेक्स्ट में पकड़ूंगा। – John

+0

क्या आप SavingChanges ईवेंट से कनेक्ट नहीं हो सकते हैं? http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx – rene

उत्तर

7

इसे संभालने के लिए कोई बिल्ड-इन ईवेंट नहीं है लेकिन आप अपने व्युत्पन्न संदर्भ में SaveChanges विधि को ओवरराइड कर सकते हैं और base.SaveChanges पर कॉल करने के बाद अपने स्वयं के संदर्भ प्रकार के लिए विशिष्ट कस्टम ईवेंट को आग लगा सकते हैं।

+0

यह डीबीकॉन्टेक्स्ट के लिए सच है लेकिन डायनामिकडेटा में ऑब्जेक्ट कॉन्टेक्स्ट। सेव चेंज() को कॉल किया जाता है जिस पर मेरा कोई नियंत्रण नहीं है (इसलिए प्रश्न के शीर्षक में ऑब्जेक्ट कॉन्टेक्स्ट अनुरोध)। – John

+0

आप 'ऑब्जेक्ट कॉन्टेक्स्ट' के लिए 'SaveChanges (SaveOptions)' को ओवरराइड कर सकते हैं और डायनामिक डेटा आपके व्युत्पन्न 'ऑब्जेक्ट कॉन्टेक्स्ट' को स्वीकार करता है इसलिए मुझे अंतर दिखाई नहीं देता है। –

+0

मैं उसमें देख लूंगा। – John

0

मुझे माफ़ कर दो, लेकिन मुझे जवाब में समाधान नहीं मिल रहा है।

मुझे मेरी समझ (और मेरे मामले) के अनुसार इस सवाल का अलग तरीके से व्यक्त करते हैं:

मैं गतिशील डेटा है, जो केवल विन्यास के रूप में स्वीकार करता है ObjectContext उपयोग कर रहा हूँ; यदि आप DbContext (जो कोड पहले साथ जाने के लिए रास्ता नहीं है) का उपयोग तो आप की तरह संपत्ति "IObjectContextAdapater.ObjectContext" पारित करना होगा निम्नलिखित:

DefaultModel.RegisterContext(() => { return ((IObjectContextAdapter) new MyDbContext()).ObjectContext; }, new ContextConfiguration() { ScaffoldAllTables = true }); 

समस्या यहाँ है कि आप परिवर्तन सहेजते हैं, MyDbContext की SaveChanges विधि को कॉल नहीं किया जाता है, इसके बजाय डायनामिक डेटा MyDbContext.ObjectContext में SaveChanges विधि को कॉल करता है। तो MyDbContext में SaveChanges को ओवरराइड करना इस मामले में बेकार है।

हम ऑब्जेक्ट कॉन्टेक्स्ट संपत्ति में SaveChanges का उपयोग कैसे कर सकते हैं और व्यवहार को बदल सकते हैं ताकि हम अपना कस्टम कोड लिख सकें?

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx:

लेकिन वैसे भी, समाधान मैं सही पाया ऊपर सवाल है, जो ObjectContext संपत्ति में SavingChanges घटना के लिए एक ईवेंट हैंडलर जोड़ने के लिए "नवीनीकरण" द्वारा एक टिप्पणी में था, यहाँ फिर से लिंक है

मुझे उम्मीद है कि यह

संबंधित मुद्दे