5

में जोड़ता हूं, मेरे पास काफी बड़ा डेटाबेस है, लगभग 80 टेबल या तो। इसलिए मैंने टेबल को 1 बड़े एडीएमएक्स फ़ाइल में सभी 80 टेबल रखने के बजाय बाध्य संदर्भ में अलग करने का निर्णय लिया है।क्या मैं एक ही तालिका को कई इकाई ढांचे में बाध्य संदर्भ

बिक्री, ग्राहकों, आदि जैसे तो मैं घिरा है संदर्भों

मैं अपने ग्राहकों edmx फ़ाइल के भीतर अपने मुख्य ग्राहक तालिका है। हालांकि, मुझे बिक्री फ़ील्ड से ग्राहक तालिका से सभी फ़ील्ड तक पहुंचने की ज़रूरत नहीं है, लेकिन सभी 1 या 2 फ़ील्ड (उदा।, मुझे केवल ग्राहक ग्राहक की आवश्यकता है, पूरे ग्राहक ऑब्जेक्ट/टेबल की बजाय)।

क्या मुझे संपूर्ण ग्राहक तालिका को बिक्री edmx फ़ाइल में जोड़ना है? इस परिदृश्य के लिए सबसे अच्छा अभ्यास क्या है?

उत्तर

5

इस दृष्टिकोण (IMO) के साथ अंतर्निहित मुद्दों के एक जोड़े हैं:

एफई, किसी भी ORM की तरह, हठ चिंता में गिर जाता है। इस तरह से आप हस्तक्षेप नहीं कर सकते कि आप अपने डोमेन मॉडल को कैसे बनाते हैं। तथ्य यह है कि आपके सभी इकाइयां आपके पास एक दृढ़ता स्टोर की तरह लगती हैं, यह संकेत हो सकता है कि आपके बाध्य संदर्भ ओवरलैपिंग हैं या अस्तित्व में नहीं हैं।

बेहतर संरचना में जाने की कोशिश करना एक बुरी चीज नहीं है :) --- हालांकि, मार्क ओरेटा ने कहा, मैं शायद ईएफ संरचना से परेशान नहीं होगा।

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

यदि आप अपने डेटा को विभाजित करने के मार्ग पर जाते हैं तो आपको विभाजित करने की आवश्यकता होगी।

हालांकि विभिन्न बीसी से डेटा एक ही स्टोर में हो सकता है, आपको अपने डेटा के बारे में सोचना चाहिए, हालांकि प्रत्येक बीसी का अपना डेटाबेस है। कभी-कभी मेरे पास अलग-अलग फ़ोल्डरों/नामस्थान (यहां .NET) में विभिन्न चिंताओं (कुछ परतें) के साथ एक एकल प्रोजेक्ट है। उन चिंताओं को अलग-अलग असेंबली में विभाजित करना संभव होना चाहिए। तो उन्हें बहुत कसकर नहीं जोड़ा जाना चाहिए। इस डेटा संरचना के लिए यह वही है जिसे आप विभाजित करने का प्रयास कर रहे हैं। आपको संक्षेप में प्रासंगिक बीसी डेटा को एक अलग डेटाबेस में विभाजित करने में सक्षम होना चाहिए। बीसी भर में डेटा प्राप्त करने के लिए तंत्र एक और मामला है और मुझे लगता है कि अगर इसे संबोधित नहीं किया जा सकता है तो आपको मुश्किल हो सकती है।

हालांकि मुझे नहीं लगता कि उस डेटा की ओर से पिछड़े वर्ग की पहचान करने के लिए सबसे अच्छा विचार हो सकता यह निश्चित रूप से सही दिशा :)

+0

तो तुम कह रहे हैं, यह वास्तव में अगर मैं अपने बिक्री ईसा पूर्व में ग्राहक जोड़ने कोई फर्क नहीं पड़ता, क्योंकि यह अच्छा है सवाल का जवाब देने प्रत्येक बीसी को एक अलग डेटा स्टोर के रूप में पेश करने के लिए? –

+0

इसके अलावा, जब आप कहते हैं कि मुझे अपने विक्रय डोमेन में एक असामान्य ग्राहक नाम की आवश्यकता है, तो क्या आपका मतलब है कि मुझे अपनी बिक्री तालिका में एक और कॉलम ग्राहक नाम जोड़ने की आवश्यकता है? या क्या आपका मतलब है कि मुझे जोड़ने की ज़रूरत है मेरी बिक्री edmx (बीसी) में पूरी ग्राहक तालिका? –

+0

यह बात यह है: यदि आप अपने विक्रय डोमेन में ग्राहक जोड़ते हैं तो यह एक वीओ बन जाता है क्योंकि यह डेटा प्रदान कर रहा है (केवल एक दृश्य) और आप इसके साथ बातचीत नहीं करेंगे। हो सकता है कि बिक्री डोमेन में 'ग्राहक' के पास केवल एक आईडी और पूर्ण नाम हो। लेकिन ग्राहक इकाई में अपने बिक्री डोमेन में" खींचें "नहीं। मैं woul डी अपने बिक्री डोमेन में denormalized ग्राहक नाम के लिए चुनते हैं। बेशक यह सब संदर्भ पर निर्भर करता है :) –

2

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

यह आवश्यक नहीं है कि आपकी सभी टेबल एक ही एडीएमएक्स में रखें, जब तक आप इसे बनाते हैं, इसे अपने इच्छित क्रियाओं के लिए उपयोग करें, और फिर इसका निपटान करें, ऑब्जेक्ट ग्राफ़ नहीं होगा वह बड़ा हो जाओ।

वैकल्पिक रूप से, यदि आप बाध्य संदर्भों को रखना चाहते हैं, तो आपके पास एक रिपोजिटरी हो सकती है या जब आपको इसकी आवश्यकता होती है तो उसे आईडी द्वारा लाया जा सकता है।

var customer = customerContext.GetCustomerById(sale.CustomerId); 
8

मैं इस विषय http://msdn.microsoft.com/en-us/magazine/jj883952.aspx

मैं पर जूली Lerman के दृष्टिकोण की तरह में एक कदम है एक्सेस प्रदर्शन के लिए बाध्य संदर्भों का उपयोग करें क्योंकि जेनरेट किए गए दृश्यों का उपयोग करते समय भी छोटे dbcontexts का उपयोग करते समय संदर्भों का लोड समय तेज होता है। एक्सेस मॉडल को बस भरना अच्छा है। प्रदर्शन एमएस ef साइट पर युक्तियों पर विचार करें: http://msdn.microsoft.com/en-us/data/hh949853

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

मैं डीबी निर्माण/माइग्रेशन को प्रबंधित करने के लिए एक बड़े सुपरसेट संदर्भ का उपयोग करता हूं। लेकिन दिन-प्रतिदिन तक पहुंच नहीं।

छोटे डीबीकोनटेक्स का उपयोग रोज़ाना डेटा तक पहुंच के लिए किया जाता है।

तो हां सभी माध्यमों से बाध्य संदर्भों का उपयोग करें। यह के समान डेटा स्टोर के खिलाफ हो सकता है। और जैसा कि शब्दों में "हाँ एक ही तालिका (DbSet) कई संदर्भों में दिखाई दे सकता है।

+0

एक ही इकाई को एकाधिक संदर्भों में जोड़ते समय इकाई कॉन्फ़िगरेशन प्रबंधित करने के बारे में आप कैसे जाते हैं, खासकर जब ईएफ ने सम्मेलन के माध्यम से नेविगेशन गुण खींच लिया है? मेरे पास इस मुद्दे पर अधिक जानकारी है [यहां] (http://stackoverflow.com/questions/18486699/entity-configuration-management-with-ddd-bounded-contexts)। –

+1

दुर्भाग्यवश यदि 'अनदेखा' संपत्ति या तालिका पर्याप्त नहीं है और आप विशिष्ट तालिकाओं पर विशिष्ट नेविगेशन विकल्पों को विशिष्ट चाहते हैं, तो आपको बेस क्लास NO Nav की आवश्यकता होगी। कक्षा 1: एनवीए के साथ आधार और एनवी के बिना कक्षा 2। यदि आपके पास उस विशिष्ट आवश्यकता है तो वह पहलू दर्दनाक लेकिन अपरिहार्य है। –

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