2008-10-24 8 views
11

मैं डेटाकॉन्टेक्स को व्यवस्थित करने के तरीके के बारे में सर्वोत्तम रणनीति को समझने की कोशिश कर रहा हूं। हमारे द्वारा काम किए जाने वाले सामान्य डीबी में आमतौर पर तीसरे-सामान्य रूप में 50 से 100 टेबल और उनके बीच कई संबंध होते हैं। मुझे लगता है कि हम दो विकल्प हैं:LINQ से SQL एकाधिक डेटाकॉन्टेक्स्ट-एस

  1. रखें एक भी संदर्भ में सभी तालिकाओं। इससे यह सुनिश्चित होगा कि हम जो कुछ भी करते हैं वह डेटाबेस में सही क्रम में किया जाएगा। समस्या यह है कि LINQ डिजाइनर 50+ टेबल के साथ एक गड़बड़ होगा और मुझे चिंता है कि प्रदर्शन प्रभावित हो सकता है।
  2. तालिकाओं के तार्किक समूह के आधार पर कई डेटा संदर्भ बनाएं। समस्या यह है कि ऐसे स्थान होंगे जहां एक संबंध में एक पक्ष एक संदर्भ में होगा और दूसरा एक दूसरे में होगा। हमें सही क्रम में संदर्भ दोनों को मैन्युअल रूप से करने का ख्याल रखना होगा।

क्या इसे संभालने के लिए कोई अनुशंसित अभ्यास है?

अधिक विवरण:

मैं एसक्यूएल करने के लिए LINQ के शीर्ष पर अपने ही संस्थाओं और काम की इकाई बनाना चाहते हैं। इकाइयों को एक एक्सएमएल मॉडल फ़ाइल में परिभाषित किया जाएगा जहां LINQ इकाइयों को मैपिंग भी निर्दिष्ट किया जाएगा। एक कस्टम उपकरण मॉडल के आधार पर मेरी संस्थाओं (पीओसीओ) उत्पन्न करेगा। क्लाइंट कोड केवल मेरी संस्थाओं और काम की मेरी इकाई के साथ बातचीत करेगा; डेटाकॉन्टेक्स्ट या LINQ इकाइयों के साथ सीधे कभी नहीं। हालांकि मैं LINQ से SQL को बॉक्स से बाहर प्रदान करने के लिए डुप्लिकेट नहीं करना चाहता हूं, इसलिए मैं अंतर्निहित LINQ DataContext का उपयोग करना चाहता हूं। इसका मतलब है कि मेरे पास अलग-अलग डेटा संदर्भों में दो ऑर्डर नहीं हो सकते हैं, क्योंकि मेरे दोनों पॉको ऑर्डर को मैप करना संभव नहीं होगा।

उत्तर

0

आप संदर्भों है कि आप काम की इकाइयों करने की अनुमति बनाना चाहिए। इसमें ओवरलैपिंग टेबल मैपिंग शामिल हो सकती है।

Context1: ग्राहक कई चालान

है

Context2: ग्राहक कई आदेश

है

Context3: चालान कई आदेश

है
+0

मैं इसके बावजूद, लेकिन Context2 से ऑर्डर का उपयोग Context3 में नहीं किया जा सकता .... आप दो अलग-अलग ऑर्डर इकाइयों के साथ समाप्त हो जाएंगे – Albert

+0

यदि कार्य इकाइयों में अलग हो गया है, तो आप किसी ऑब्जेक्ट का उपयोग करने की कोशिश कभी नहीं करेंगे संदर्भ 3 में संदर्भ 3 से। –

+0

मैं वास्तव में LINQ इकाइयों के शीर्ष पर पीओसीओ और कार्य इकाई को कार्यान्वित करना चाहता हूं ताकि क्लाइंट कोड यूनिटऑफवर्क के साथ काम करेगा जिसमें केवल एक ही प्रकार का ऑर्डर होगा। आपके प्रस्तावित समाधान में मुझे नहीं पता कि ऑर्डर – Albert

2

LINQ करने वाली एसक्यूएल मैपिंग जब आप का उपयोग करें कि में, जैसे आपके द्वारा लिखे गए डेटासेट हैं एक, आप डेटा वाले सत्र से निपट रहे हैं। आपके पास कई अलग-अलग डेटाकॉन्टेक्स में समान सारणी हो सकती है। वे केवल कक्षाएं हैं, आखिरकार; जब तक आप मौजूदा डेटा के साथ भरकर या नए डेटा बनाने के लिए उनका उपयोग करके डेटाबेस के साथ बातचीत शुरू नहीं करते हैं, तब तक उनका कोई मतलब नहीं है।

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

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

0

मैं प्रति डेटाबेस एक डेटाकॉन्टेक्स्ट का उपयोग करता हूं।

औसत सारणी 100 तक हो सकती है, हालांकि अनुभव से मुझे किसी भी प्रदर्शन के मुद्दों का अनुभव नहीं होता है।

डेटाकॉन्टेक्स्ट एक अलग परियोजना में है, जिसे संकलित किया गया है। उसके एवज में dll BLL

4

से संदर्भित यह एक आम सवाल है कि अच्छी तरह से यहाँ का विश्लेषण किया गया: http://craftycode.wordpress.com/2010/07/19/linq-to-sql-single-data-context-or-multiple/

संक्षेप में, आप टेबल के प्रभावशाली तरीके से कनेक्ट प्रति समूह में अधिकतम एक डेटा संदर्भ, या एक डेटा संदर्भ बनाना चाहिए प्रति डेटाबेस।

+0

यहां शब्दावली, क्या इसका मतलब केवल एक डेटाकॉन्टेक्स्ट डीबी = नया डेटाकॉन्टेक्स्ट() है, जो किसी ऑब्जेक्ट को लॉक करता है (या यह सुनिश्चित करने के लिए कुछ कर रहा है कि केवल एक ही समय में रहता है)? – paIncrease