2011-10-05 9 views
7

मेरे पास नियमों का संग्रह प्रबंधित करने वाला एक साइट है और डेटाबेस में नियमों के आधार पर एक अलग विंडोज फॉर्म एप्लिकेशन फ़ाइल स्तर परिवर्तन करता है।डेटाबेस से पूछने के लिए पहले ईएफ कोड को कैसे बल दें?

इनमें से दोनों एप्लिकेशन ईएफ कोड फर्स्ट डीबीकॉन्टेक्स्ट के लिए समान पुस्तकालयों का उपयोग करते हैं, लेकिन प्रत्येक एप्लिकेशन संदर्भ की अपनी प्रतिलिपि को तुरंत चालू कर रहा है।

समस्या यह है कि संदर्भ के प्रत्येक चल रहे संस्करण को अन्य संस्करण द्वारा किए गए परिवर्तनों से अनजान है। जैसे अगर मैं साइट पर कोई नियम बदलता हूं, तो फॉर्म ऐप में अभी भी पिछले संस्करण है।

मुझे पता है कि मैं शायद इस गलत तरीके से जा रहा हूं, और साइट से जेएसओएन/आरईएसटी के माध्यम से फॉर्म ऐप में किसी प्रकार का डेटा एक्सेस होना चाहिए, लेकिन मैं अन्य कारणों से नहीं करना चाहूंगा।

क्या संदर्भ पर "कैशिंग अक्षम" करने का कोई तरीका है और प्रत्येक क्वेरी को डीबी को हिट करने के लिए मजबूर किया गया है?

उत्तर

10

कैशिंग अक्षम करने का कोई तरीका नहीं है। डेटा को रीयलोड करने के लिए आपको मैन्युअल रूप से प्रत्येक क्वेरी सेट करनी होगी। यह सुविधा DbContext API => के साथ उपलब्ध नहीं है, आपको ऑब्जेक्ट कॉन्टेक्स्ट एपीआई का उपयोग करना होगा।

ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext; 
ObjectSet<YourEntity> set = objectContext.CreateObjectSet<YourEntity>(); 
set.MergeOption = MergeOption.OverwriteChanges; 
var query = from x in set where ... select x;  

या सरल परिदृश्य: यदि संभव हो तो बेहतर संदर्भ प्रबंधन का उपयोग करें और उसी संदर्भ पर प्रश्नों को चलाने के बजाय हमें एक नया।

बीटीडब्ल्यू। Winform एप्लिकेशन में उजागर होने वाली सेवा रखने और वेब साइट द्वारा इसका उपभोग करने का विचार गलत है। आपको तीसरे सेवा के आवेदन की आवश्यकता होगी (या तो वेब सर्वर या विंडोज सेवा के रूप में होस्ट किया गया) और दोनों वेबसाइट और विनफॉर्म एप्लिकेशन उस नए एप्लिकेशन के माध्यम से डेटाबेस तक पहुंच पाएंगे। ईएफ केवल नए आवेदन में होगा।

संपादित करें:

अपने WinForm आवेदन डेटाबेस से लोड डेटा में परिवर्तन नहीं है, तो आप भी इस का उपयोग कर सकते हैं:

var query = from x context.YourEntities.AsNoTracking() where ... select x; 

यह संस्थाओं के आंतरिक परिवर्तन ट्रैकिंग बंद हो जाएगा और यह भी होना चाहिए प्रत्येक बार इकाई को पुनः लोड करने के लिए ईएफ को मजबूर करें लेकिन इससे बचत में परिवर्तन बहुत कठिन हो जाएगा।

+0

मुझे सरल परिदृश्य पसंद है :) वर्तमान में मेरे पास कन्स्ट्रक्टर के माध्यम से डी के माध्यम से बनाया गया भंडार है। मुझे लगता है कि मुझे उस पर ध्यान देना होगा और आवश्यकतानुसार एक नया संदर्भ उत्पन्न करने के लिए एक सेवा लोकेटर का उपयोग करना होगा? – mattdwen

+0

मान लें कि "YourEntity" ने "उपयोगकर्ता" इकाई से संबंधित है, वे MegeOption.OverwriteChanges के साथ रीफ्रेश नहीं हैं, YourEntity.Users को रीफ्रेश करने के तरीके पर कोई सुझाव भी? –

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