2012-07-24 12 views
7

के साथ बहु-उपयोगकर्ता वातावरण में इकाई फ्रेमवर्क डेटा अपडेट मुझे शीर्षक की व्याख्या करने दें।केंद्रीय डेटाबेस

मैं एंटीटी फ्रेमवर्क कोड का उपयोग पहले एक आवेदन (टेस्ट ऐप) में कर रहा हूं। डीबगिंग उद्देश्यों के लिए TestApp एक SQLExpress डेटाबेस (केंद्रीय डेटाबेस सर्वर) से कनेक्ट होता है।

चीजों को सरल रखने के लिए, डेटाबेस में एक तालिका "उत्पाद" होती है और टेस्टएप डेटाग्रिड में डेटाबेस से सभी "उत्पाद" दिखाता है और टेस्ट ऐप "उत्पाद" जोड़ या उत्पाद नाम को संशोधित कर सकता है।

public class Product { 
public int ProductId { get; set; } 
public string ProductName { get; set; } 
} 

public DbSet<Product> Products { get; set; } 

मेरे पास है के लिए उदाहरण के लिए 3 पीसी के जहां TestApp स्थापित किया है और चल रहा है (मैं उन्हें Client_X फोन करता हूँ)। यदि मैं क्लाइंट_1 के माध्यम से एक नया "उत्पाद" जोड़ता हूं, तो यह क्लाइंट_2 और क्लाइंट_3 पर TestApp में सीधे दिखाई नहीं देता है। केवल जब क्लाइंट_2 और क्लाइंट_3 नए जोड़े गए रिकॉर्ड को देखते हैं तो मैन्युअल रीफ्रेश करें (मैन्युअल रीफ्रेश)।

मैं क्या जानना चाहता हूं: मैं ईएफ कोड फर्स्ट के माध्यम से डेटाबेस में परिवर्तनों के बारे में कैसे जान सकता हूं? क्लाइंट_2 और क्लाइंट_3 को स्वचालित रूप से अपडेट किया जाएगा क्योंकि एक नया आइटम जोड़ा या हटा दिया गया था?

मुझे यकीन नहीं है कि यह बहुत ज्यादा पूछा जाता है लेकिन यह दिखाने के लिए एक सरल नमूना प्रोजेक्ट या सरल कोड उपयोगी होगा।

एफवाईआई: मैं पहले ईएफ कोड के लिए बिल्कुल नया हूं। (मैं .NET 4.0 और ईएफ कोड का उपयोग कर रहा हूं पहले 4.3.1)

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

योजना:

Client_3< 
     \ 
      \ 
      \ 
      \ 
      \> 
Client_1 <---> [Central Database] <----> Client_2 

अपडेट/संपादित करें:

ठीक है, यह स्पष्ट है कि इकाई की रूपरेखा ही कई ग्राहकों के बीच किसी भी सिंक्रनाइज़ नहीं करता है।

तो मैं एक और सवाल पूछेंगे: मैं क्लाइंट-सर्वर तरह से काम करने की सोच रहा हूँ:

  • जो डेटाबेस बनाता है और पहले इकाई की रूपरेखा कोड का उपयोग करता है एक एकल सर्वर अनुप्रयोग।
  • एकाधिक क्लाइंट जो उस सर्वर के साथ संवाद करते हैं एप्लिकेशन।

    ग्राहक यह सुनिश्चित करने का सबसे अच्छा तरीका क्या होगा कि ग्राहक एक ही डेटा का उपयोग करें और प्रत्येक दूसरे अपडेट/परिवर्तन देखें? (मैं कोड नमूने की सराहना करेंगे।)

+0

संबंधित प्रश्न मिला: http://stackoverflow.com/questions/4852564/entity-framework-underlying-data-in-database-change-notification – juFo

+0

मैं वही काम करना चाहता हूं, लेकिन एक वेब एप्लिकेशन के साथ । मेरे पास एक ही डीबी से जुड़े कई वेब सर्वर हैं - प्रसाद – Prasad

उत्तर

6

कुछ भी नहीं है जिसका उपयोग आप इकाई ढांचे का उपयोग कर ग्राहकों को सूचित करने के लिए कर सकते हैं। आप SaveChanges के लिए ओवरलोड लिख सकते हैं, या एक्सटेंशन विधि बना सकते हैं, लेकिन जहां तक ​​आपके पास क्लाइंट-> सर्वर आर्किटेक्चर नहीं है, मैं कल्पना नहीं कर सकता कि आप इसे कैसे प्राप्त कर सकते हैं।

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

एक और दृष्टिकोण वहाँ वांछित परिणाम प्राप्त करने के लिए विभिन्न तरीके हैं, उनमें से कोई भी इकाई ढांचे से जुड़े हुए हैं कि के रूप में यह ORM और न ही एक आवेदन ढांचे या है, एमएस SQL ​​सेवा ब्रोकर Overview (Service Broker)

उपयोग करने के लिए इस तथ्य के बावजूद है .NET के साथ बनाए गए अनुप्रयोगों के लिए संचार ढांचा।

2

यह एफई की जिम्मेदारी नहीं है, यह अपने सामान्य आवेदन डिजाइन करने के लिए नीचे अधिक है। अपेक्षाकृत सरल पृष्ठभूमि या आवधिक मतदान प्रक्रिया आपकी समस्या का समाधान करेगी।

रिकॉर्ड लॉकिंग जैसे कई उपयोगकर्ताओं से निपटने के दौरान और अधिक विचार हैं और चीजों के इस पक्ष में थोड़ा सा शोध करने का विचार हो सकता है और यदि आपको कोई विशिष्ट समस्या हो तो वापस आना चाहिए।

+0

मतदान अच्छा समाधान नहीं दिख रहा है? अतिरिक्त नेटवर्क यातायात उत्पन्न करना। डेटाबेस में और अधिक काम है और यदि कोई उपयोगकर्ता डेटाग्रिड में स्क्रॉल कर रहा है तो उसका दृश्य होगा; हर मिनट रीफ्रेश की वजह से रीसेट हो जाता है जो सभी डेटा को फिर से लोड करता है। – juFo

+0

@juFo वे केवल सुझाव हैं, आपको बहु-उपयोगकर्ता वातावरण में अधिक सामान्य शोध करने की आवश्यकता होगी और स्वयं को सबसे अच्छा समग्र समाधान समझने की आवश्यकता होगी, यह कई कारकों पर निर्भर करेगा। मेरा मुद्दा यह है कि यह एक ईएफ समस्या नहीं है। – ChrisBint

+0

तो ईएफ में बिल्कुल कुछ भी नहीं है जो आपको बताता है कि आपका संदर्भ पुराना है या डेटाबेस का नया डेटा है? – juFo

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