2008-10-10 10 views
7

हम एक उच्च-वॉल्यूम ऑर्डर रिकॉर्ड सिस्टम बनाने की कोशिश कर रहे हैं। तीन रहे हैं प्राथमिक टेबल: 1. आदेश 2. ORDERDETAILS 3. OrderShipmentLINQ से SQL और Concurrency Issues

शिपमेंट तालिका आदेश के अनुसार एन रिकॉर्ड होता है और किसी भी रिकॉर्ड शिपमेंट प्रवेश करने से पहले ग्राहक वें क्रम को स्वीकार करता है यह है जिसके बाद बदला जा सकता है, जमे हुए। (एक व्यवसाय की आवश्यकता)

हालांकि यह वास्तविक दुनिया परिदृश्यों में नहीं हो सकता है ... हमारे लोड परीक्षणों के दौरान, हमें System.Data.Linq.ChangeConflictException अपवाद मिल रहे हैं। एक ट्रांज़ेशन के अंदर सबमिट को लपेटना या तो मदद नहीं कर रहा है। क्या हम अपडेट ऑपरेशन की पूरी अवधि के लिए पंक्ति पर लॉक प्राप्त करने के लिए LINQ को मजबूर नहीं कर सकते?

क्या इस पर पाने का कोई और तरीका है? जो कि डेटा और यह करने से हो रही है -

+0

आप कैसे संभाल रहे हैं LINQ संगामिति? – flesh

उत्तर

7

आप एक ही डेटा पर समवर्ती अद्यतन के साथ वास्तविक मुद्दों कर रहे हैं, तो आप एक सौदे में पूरे कार्य को करते सोच सकते हैं। जब तक आप अल्पकालिक, परमाणु संचालन के रूप में प्राप्त/अद्यतन/प्रतिबद्धता का इलाज करते हैं (यानी आप बीच में उपयोगकर्ता इनपुट के लिए रोक नहीं देते हैं) यह ठीक होना चाहिए।

विशेष रूप से, एक serializable अलगाव स्तर के साथ, कोई भी डेटा है कि आप (अर्थात कुछ भी आप पूछे गए हैं) पर एक रीड ताला अद्यतन कर सकते हैं। एकमात्र समस्या यह है कि यदि अलग-अलग प्रश्न अलग-अलग ऑर्डर में डेटा पढ़ रहे हैं तो इससे डेडलॉक परिदृश्य हो सकते हैं। AFAIK, LINQ-to-SQL को (अपडॉक) संकेत जारी करने का कोई तरीका नहीं है, जो शर्म की बात है।

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

+0

हाय, उत्तर के लिए धन्यवाद ... मैं एक सौदे के तहत यह लपेटकर का प्रयास किया, मैं तो बस एक अलग अपवाद मिलता है ... कि आपरेशन एक गतिरोध का शिकार है। सधन्यवाद, आशीष शर्मा –

+0

मुझे आश्चर्य है कि एक ताला वृद्धि गतिरोध, या एक अलग आदेश गतिरोध है या नहीं?यदि पूर्व, एक विकल्प (हालांकि आप कई LINQ लाभ खो देते हैं) एक एसपी के साथ डेटा पूछताछ हो सकता है - तो आप लॉक एस्केलेशन मुद्दों को रोकने, अपडॉक संकेत जोड़ सकते हैं। –

+0

(अभी भी LINQ के माध्यम से, मेरा मतलब है - यानी डिजाइनर को बताएं कि यह एसपी इस तालिका को लौटाता है) –

1

आप Entity Framework जो एक सौदे के रूप में सब कुछ कार्यान्वित पर गौर कर सकते हैं। यहां दो पॉडकास्ट हैं जो एंटीटी फ्रेमवर्क के बारे में भी दिलचस्प हो सकते हैं।

DNRTV - part 1 - part 2

+1

LINQ-to-SQL भी लेनदेन का उपयोग करता है; यहां समस्या यह है कि वही लेन-देन प्राप्त और सेट नहीं फैल रहा है - लेकिन यह LINQ-to-SQL या EF के साथ समान है। –

1

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

डेटा की तार्किक ताला हल करने के लिए डीबी ताले का उपयोग करते हुए नए मुद्दों का एक ढेर के साथ पेश करने के लिए जा रहा है। एक बेहतर समाधान है कॉलम और/या टेबल जहां आप इंगित कर सकते हैं कि ऑर्डर/ग्राहक/आदि को संपादित किया जा रहा है [उपयोगकर्ता द्वारा], जब तक यह लॉक नहीं हो जाता है आदि। उस टेबल (या कॉलम) को पूछें कि ग्राहक क्या जांचता है/ऑर्डर/चीज किसी अन्य उपयोगकर्ता को इसे संपादित करने की अनुमति देने से पहले संपादन के लिए उपलब्ध है।

देखें: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3984968&SiteID=1

+0

क्या आप टूटी हुई लिंक को ठीक कर सकते हैं? – douglaslps

+0

मेरी इच्छा है कि मैं कर सकता हूं। दुर्भाग्यवश, माइक्रोसॉफ्ट ने एमएसडीएन मंचों को अद्यतन किया है, और इस प्रक्रिया में उन्होंने ऊपर दिए गए पदों सहित पदों/धागे के सभी लिंक मारे गए। धागा अभी भी कहीं मौजूद है, लेकिन मुझे याद नहीं है कि यह कौन सा था ... – KristoferA