2010-04-19 4 views
13

मुझे यह समस्या है जहां एक फ़ील्ड के बाद (तालिका MyTable में फ़ील्ड 3 कहें) डेटाबेस पर अद्यतन किया गया है, MyTable.Field3 (सी # में) अभी भी पुराने मान को वापस कर रहा है।डेटाबेस में डेटा बदलने पर LINQ से SQL अद्यतन नहीं होता है

मुझे संदेह है कि कुछ कैशिंग है ...?

मैं इसे कैसे मजबूर कर सकता हूं:
डेटाबेस से मूल्य पढ़ें?
या
माईटेबल क्लास में मूल्य अपडेट करें?

या क्या मुझे याद आती है? मैं LINQ

पर नया हूं, अग्रिम धन्यवाद।

उत्तर

11
DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, entity); 

आप अपने पूरे इकाई सेट ताज़ा करने के लिए चाहते हैं, तो सबसे आसान तरीका शायद सब कुछ के लिए एक नया DataContext और requery तैयार करना है।

+2

यह इस अपवाद को फेंकता है: ताज़ा करने के लिए निर्दिष्ट एक वस्तु को पहचाना नहीं गया है। जाहिर है कि संदर्भ का उपयोग कर रिकॉर्ड बदल दिया गया है। सबमिट चेंज(); मैं बता सकता हूं कि एक रिकॉर्ड अपडेट किया जा रहा है, मैं अपडेट के ठीक बाद उस रिकॉर्ड के लिए मूल्य को कैसे रीफ्रेश कर सकता हूं? – Aximili

+0

क्या कोई नमूना कोड कहीं भी है? मुझे उन शब्दों को भी नहीं पता जो मुझे Google की ज़रूरत है, मुझे क्या खोजना चाहिए? धन्यवाद – Aximili

+3

जब आप SubmitChanges() को कॉल करते हैं, तो आपकी ऑब्जेक्ट स्वयं को ताज़ा कर देगी। यदि ऐसा नहीं होता है, तो यह सुनिश्चित करने के लिए कि यह "ऑटो अपडेट" पर सेट है, अपने लिंक से SQL डेटा मॉडल के फ़ील्ड पर UpdateMode प्रॉपर्टी को चेक करें। –

6

आप मॉडल को गलत समझ रहे हैं। प्रत्येक बार जब आप किसी सदस्य के लिए पूछते हैं तो SQL से SQL तक डेटाबेस से गुजरता नहीं है। जब आप किसी ऑब्जेक्ट को डेटाबेस से लाते हैं, तो यह स्मृति में SQL से ऑब्जेक्ट के रूप में स्मृति में संग्रहीत हो जाता है, और वहां यह खड़ा होता है। जब तक आप डेटाबेस को फिर से क्वेरी नहीं करते हैं तब तक आपको ऑब्जेक्ट का अप-टू-डेट संस्करण नहीं मिलता है।

+0

मैं देखता हूं, यही मैंने सोचा, धन्यवाद डेव। तो मैं डेटाबेस में किसी से मेल खाने के लिए स्मृति में मान को सिंक कैसे करूं? – Aximili

+1

आप ऑब्जेक्ट को डेटाकॉन्टेक्स्ट से फिर से अनुरोध करेंगे। –

+0

रॉबर्ट आप कैसे करते हैं? – Aximili

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