2013-02-05 18 views
9

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

अगर मैं गलत हूं तो मुझे सही करें लेकिन मेरा मानना ​​है कि इसे सिंक्रोनस और एसिंक्रोनस डेटा एक्सेस के रूप में भी जाना जाता है।

मेरा सवाल है, इस कार्यक्षमता को लागू करने के लिए उद्योग सबसे अच्छा अभ्यास क्या है। क्या डेटाबेस पक्ष (एसक्यूएल का उपयोग करके) से इसे नियंत्रित करने का कोई तरीका है या इसे क्लाइंट के माध्यम से किया जाना चाहिए?

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

उत्तर

6

सर्वोत्तम अभ्यास रोवर्सन और आशावादी लॉकिंग का उपयोग करना है।

Optimistic Concurrency Patterns समझाया गया।

यदि पहले कोड का उपयोग करते हैं, तो अपने POCO में एक फ़ील्ड शामिल करें।

public virtual byte[] RowVersion { get; set; } 

ईएफ आपकी तालिका में टाइमस्टैम्प/रोवर्सियन संपत्ति जोड़ देगा। अपडेट के दौरान इसकी जांच की जाएगी। और बदलते समय डीबी द्वारा स्वचालित रूप से अपडेट किया गया।

संपादित करें: बेहतर व्याख्या करने के लिए।

क्या ईएफ खोज रहा है वह गुण है जो समवर्ती क्षेत्र हैं ताकि आप वास्तव में एक या अधिक क्षेत्रों के साथ सहमति को नियंत्रित कर सकें।

entity.Property(p => p.RowVersion).IsConcurrencyToken() 

जब एक अद्यतन प्रदर्शन करने या हटाने आप परिभाषित अपवाद

catch (DbUpdateConcurrencyException ex) 

एफई संगामिति निशानी के रूप में व्यवहार करता है RowVersion पकड़ने। यह आम तौर पर इस्तेमाल किया दृष्टिकोण है। चूंकि SQLServer स्वचालित रूप से आपके लिए इस फ़ील्ड प्रकार को अपडेट करेगा। बहुत तेज़ और आसान। लेकिन आप ईएफ को बता सकते हैं कि एक संपत्ति एक समवर्ती टोकन स्पष्ट रूप से है और एक से अधिक है।

तो ईएफ को अपडेट के लिए कहां से गुण जोड़ना चाहिए और हटाएं ताकि यह सुनिश्चित किया जा सके कि रिकॉर्ड एक्सेस नहीं हुआ है।

+0

धन्यवाद, यह वही है जो मुझे चाहिए। मुझे यकीन नहीं था कि यह खुद को शोध करने के लिए क्या जाना जाता था। –

+0

@phil soday - यदि आपका कोड पहले उपयोग करता है और आप अपने डोमेन में उस पंक्ति को डालते हैं तो क्या यह स्वचालित रूप से रोवर्सन लॉकिंग को जानता है? क्या इसे रोवर्सन कहा जाना है? क्या यह एक अपवाद फेंकता है या यह कैसे काम करता है? – chobo2

+0

ऐसा लगता है कि मुझे वैसे भी चाहिए जो मैं पहले कोड का उपयोग नहीं कर रहा हूं। मैं अभी भी ईएफ 5 एडीएमएक्स का उपयोग कर रहा हूं, यह टीआईआईएस को लागू करने का एक तरीका है यदि उपयोगकर्ता बी से पहले एक बदलाव करता है तो उपयोगकर्ता क्या करता है – rogue39nin