में किए गए लोड लोड में मेरे पास एक WPF ऐप है जिसमें डेटा की एक सूची है जिसमें मैंने ईएफ के साथ लोड किया है। कुछ अन्य विंडो ग्रिड पर लोड किए गए उसी डेटा में परिवर्तन कर सकती हैं लेकिन एक अलग dbcontext उदाहरण का उपयोग कर सकती हैं। मैं ग्रिड पर परिवर्तित डेटा कैसे देख सकता हूं? मुझे पता है कि मैं ctx.Entry<MyEntity>(instance).Reload();
के साथ एक इकाई को रीफ्रेश कर सकता हूं - लेकिन मैं सभी बदलाव देखना चाहता हूं और इससे कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, मुझे केवल पुराने मान दिखाई देते हैं। मैं AsNoTracking
का उपयोग नहीं कर सकता हूं और न ही इस मामले में नया DbContext
उदाहरण बना सकता हूं।किसी अन्य डीबीकॉन्टेक्स्ट
उत्तर
मेरे लिए एक बहुत ही साधारण मामला जैसा दिखता है और मैं नहीं देख सकता कि ईएफ केवल इकाइयों के मूल्यों को अपडेट क्यों नहीं करता है।
ईएफ में यह तंत्र भी है लेकिन यह डीबीकॉन्टेक्स्ट एपीआई पर खुलासा नहीं है। आपको ऑब्जेक्ट कॉन्टेक्स्ट पर वापस जाने की आवश्यकता है। तुम सिर्फ संस्थाओं के सेट फिर से लोड करने चाहते हैं तो आप कहेंगे:
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.Refresh(RefreshMode.StoreWins, listOfEntitiesToReload);
RefreshMode.StoreWins
का कारण बनता है सभी लंबित परिवर्तन पुनः लोड मूल्यों द्वारा ओवरराइट किया जाना है। आप RefreshMode.ClientWins
का भी उपयोग कर सकते हैं जो आपके परिवर्तनों को बनाए रखेगा और उन्हें पुनः लोड किए गए डेटा के साथ विलय करेगा। इस दृष्टिकोण के साथ समस्या यह है कि यह केवल आपके पास पहले से मौजूद इकाइयों को पुनः लोड करता है। आपको नई संस्थाएं नहीं मिलेंगी।
आप नए संस्थाओं पाने के लिए और साथ ही आप किसी क्वेरी को निष्पादित करना होगा और आप एफई कि आप मूल्यों को फिर से लोड करना चाहते हैं बताना होगा चाहते हैं:
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var objectSet = objectContext.CreateObjectSet<MyEntity>();
objectSet.MergeOption = MergeOption.OverwriteChanges;
var result = objectSet.Where(...).ToList();
फिर
MergeOption.OverwriteChanges
सभी लंबित परिवर्तन अधिलेखित कर देता है, लेकिन आप MergeOption.PreserveChanges
का उपयोग विलय करने के लिए कर सकते हैं आपके संपादित मूल्यों में पुनः लोड किए गए मान।
मुझे लगता है कि कुछ संबंधों के साथ ताज़ा मूल्यों के साथ कुछ समस्याएं हो सकती हैं और शायद उन संस्थाओं को भी जो डेटाबेस में हटा दिए गए थे।
यह वही है जो मुझे चाहिए, धन्यवाद, ईएफ पर मेरा विश्वास बहाल किया गया है :) – user1526627
@ ladislav-mrnka एक प्रश्न, क्या यह आखिरी कदम वास्तव में आवश्यक है? अगर मैं आपको सही ढंग से समझता हूं, तो ईएफ केवल रिकॉर्ड्स में बदलावों को पहचान लेगा जो इसे पहले ही लोड कर चुके हैं और उन्हें पहले तरीके से मर्ज कर चुके हैं। तो यदि आप मैन्युअल रूप से किसी तालिका में कोई नई पंक्ति जोड़ना चाहते हैं तो इसे पहले तरीके से dbcontext में अपडेट नहीं किया जाएगा? मैंने अभी कोशिश की और मुझे दूसरी तरफ कोई ज़रूरत नहीं थी। शायद व्यवहार बदल गया है या मैं पूरी तरह से आपको गलत समझा? :) – DrCopyPaste
- 1. डीबीकॉन्टेक्स्ट
- 2. डीबीकॉन्टेक्स्ट
- 3. कोड-प्रथम डीबीकॉन्टेक्स्ट
- 4. किसी अन्य
- 5. किसी अन्य
- 6. किसी अन्य
- 7. किसी अन्य
- 8. किसी अन्य
- 9. किसी अन्य
- 10. किसी अन्य
- 11. किसी अन्य
- 12. किसी अन्य
- 13. किसी अन्य
- 14. ऑब्जेक्ट कॉन्टेक्स्ट और डीबीकॉन्टेक्स्ट
- 15. डीबीकॉन्टेक्स्ट की आंतरिक कैशिंग (?)
- 16. छोटे-छोटे डीबीकॉन्टेक्स्ट
- 17. डीबीकॉन्टेक्स्ट और अस्वीकृतिChanges
- 18. एकाधिक डीबीकॉन्टेक्स्ट, एकाधिक डेटाबेस .etInitializer
- 19. किसी अन्य छवि में किसी अन्य क्षेत्र में किसी अन्य क्षेत्र में क्षेत्र की प्रतिलिपि बनाना
- 20. ईएफ कोड-फर्स्ट डीबीकॉन्टेक्स्ट क्लास
- 21. फ़ाइल किसी अन्य प्रक्रिया
- 22. mvc3 किसी अन्य
- 23. PHP: किसी अन्य वर्ग
- 24. किसी अन्य xib
- 25. मैं किसी अन्य वर्ग
- 26. किसी अन्य एएसपी.NET एप्लिकेशन
- 27. किसी अन्य वर्ग
- 28. JLabel किसी अन्य JLabel
- 29. किसी अन्य वेक्टर
- 30. किसी अन्य चर
आप 'AsNoTracking' का उपयोग क्यों नहीं कर सकते? –
क्योंकि उपयोगकर्ता सीधे ग्रिड में परिवर्तन कर सकता है और इसे सहेज सकता है। – user1526627
लेकिन ऐसे मामले में आप सहेजे गए डेटा को संपादित नहीं कर सकते हैं और रीलोड इन आंकड़ों को अलग कर सकता है? आप इस तरह के मुद्दे को कैसे हल करना चाहते हैं? –