2011-06-06 14 views
7

मेरे पास स्मृति में एक LinqToSql ऑब्जेक्ट है, जिसका डेटाबेस पर फ़ील्ड मान ऑब्जेक्ट के जीवनकाल के दौरान बदलने की उम्मीद है। तो समय-समय पर मुझे यह जांचने की ज़रूरत है कि सबकुछ अभी भी सिंक हो रहा है या नहीं। मैं ऐसा करने में सक्षम होने की उम्मीद कर रहा था:DataContext.Refresh() का सही उपयोग क्या है?

myDataContext.Refresh(RefreshMode.KeepCurrentValues, myObj); 

लेकिन दुर्भाग्य से ऐसा कोई प्रभाव नहीं पड़ता है; myObj पर मान भी वही रहते हैं जब डीबी मान बदल गए हैं। MSDN documentation on this method बहुत कम है। क्या कोई मुझे बता सकता है कि मैं यहां क्या खो रहा हूं?

उत्तर

12

यदि आप अपने ताज़ा ऑब्जेक्ट के वर्तमान मान डेटाबेस में वर्तमान में मेल खाने के लिए चाहते हैं तो आपको इसके बजाय RefreshMode.OverwriteCurrentValues मोड का उपयोग करने की आवश्यकता होगी।

+1

आगागगगघ! मुझे विश्वास नहीं है कि मुझे याद आया! [गहरे लाल रंग की धब्बे] –

+1

ऐसा लगता है कि यह संबंधित संग्रह संपत्ति को अद्यतन नहीं करता है जो किसी अन्य तालिका में मानचित्र करता है। यह केवल उन गुणों को अद्यतन कर रहा है जो तालिका के कॉलम पर मैप करते हैं, जिस पर वर्तमान इकाई इंगित करती है। – RBT

3

यदि आप अपनी इकाई को अप-टू-डेट मानों के साथ "रीफ्रेश" करना चाहते हैं, तो उपयुक्त modeRefreshMode.KeepChanges या RefreshMode.OverwriteCurrentValues होगा।

KeepChanges किसी स्थानीय रूप से परिवर्तित मूल्य को छोड़ देगा। OverwriteCurrentValues डेटाबेस से सभी मूल्य प्राप्त करेगा।

ChangeConflictException एस से सावधान रहें।

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