2011-10-10 13 views
6

के लिए एकाधिक "दृश्य" मेरे पास एंटीटी फ्रेमवर्क इकाइयों से संबंधित एक डिज़ाइन प्रश्न है।इकाई फ्रेमवर्क डिज़ाइन - डेटा

मैं निम्नलिखित इकाई बनाई है:

public class SomeEntity { 
    // full review details here 
} 

यह इकाई एक उदाहरण 30 स्तंभों के रूप में है। जब मुझे एक नई इकाई बनाने की आवश्यकता होती है तो यह बहुत अच्छा काम करता है। डेटाबेस में डालने के लिए मेरे पास सभी आवश्यक फ़ील्ड हैं।

मेरे पास मेरे ऐप में कुछ स्थान हैं जहां मुझे कुछ एंटीटीटी से कुछ फ़ील्ड के साथ कुछ टैब्यूलर डेटा प्रदर्शित करने की आवश्यकता है, लेकिन मुझे केवल 30 कॉलम, शायद 2 या 3 कॉलम की आवश्यकता नहीं है।

मैं केवल खेतों मैं की जरूरत है कि एक पूरी तरह से नई इकाई बनाने करो (जो SomeEntity रूप में एक ही मेज पर नक्शे, लेकिन केवल स्तंभ मैं चाहता हूँ पुन: प्राप्त करता?) या यह एक बनाने के लिए और अधिक समझ बनाने करता है डोमेन वर्ग (PartialEntity की तरह) और इस तरह एक प्रश्न लिखें:

var partialObjects = from e in db.SomeEntities 
        select new PartialEntity { Column1 = e.Column1, Column2 = e.Column2 }; 

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

उत्तर

2

आपका पहला दृष्टिकोण संभव नहीं है। ईएफ एक ही तालिका में मैप किए गए कई इकाइयों का समर्थन नहीं करता है (कुछ विशेष मामलों जैसे टीपीएच विरासत या तालिका विभाजन) को छोड़कर।

दूसरा मामला आम परिदृश्य है। आप अपने यूआई के लिए व्यू मॉडल तैयार करेंगे और या तो अपनी इकाई को सीधे क्वेरी में मॉडल देखने के लिए प्रोजेक्ट करेंगे (यह केवल आपके द्वारा प्रोजेक्ट डीबी से ही होगा) या आप पूरी इकाई से पूछेंगे और अपने एप्लिकेशन कोड में मॉडल देखने के लिए रूपांतरण करेंगे (उदाहरण के लिए @Fernando के रूप में ऑटोमैपर का उल्लेख किया)।

यदि आप मैपिंग के लिए ईडीएमएक्स फ़ाइल का उपयोग कर रहे हैं (मुझे लगता है कि आपने ऐसा नहीं किया क्योंकि आपने का उल्लेख किया है) तो आप तीसरे दृष्टिकोण का उपयोग कर सकते हैं जो दोनों निर्दिष्ट दृष्टिकोणों से हिस्सा लेता है। वह दृष्टिकोण QueryView परिभाषित करता है - यह मैप किए गए इकाई पर ईएफ आधारित दृश्य है जो एक नई पढ़ने वाली इकाई के रूप में व्यवहार करता है। आम तौर पर यह मैपिंग में सीधे संग्रहीत पुन: प्रयोज्य प्रक्षेपण है।

+0

मेरे दूसरे दृष्टिकोण के बारे में क्या। क्या यह सिर्फ एक पीओसीओ बनाने और एक प्रश्न लिखने के लिए मान्य है जो मेरी वास्तविक संस्थाओं से पूछताछ करके उस वस्तु को वापस कर देगा? – Dismissile

1

आप एक जेनेरिक प्रॉपर्टी फ़िल्टर विधि बना सकते हैं जो किसी ऑब्जेक्ट इंस्टेंस में लेता है, और आप स्तंभ नामों की एक स्ट्रिंग सरणी में गुजरते हैं, और यह विधि केवल आपके इच्छित कॉलम के साथ गतिशील ऑब्जेक्ट लौटा देगी।

1

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

2

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

+0

हम वर्तमान में व्यू मॉडल बनाने के लिए ऑटोमैपर का उपयोग कर रहे हैं। यह परिदृश्य थोड़ा अलग है क्योंकि मैं पूरी इकाई को चुनने की अक्षमता नहीं चाहता हूं। अगर मैंने इस क्वेरी के साथ 1000 पंक्तियां पुनर्प्राप्त की हैं: var data = डीबी में से।मुख्य ईंटिटी एक का चयन करें; और फिर मैपिंग को मेरे छोटे प्रकार पर लागू किया, मुझे पूरा यकीन है कि ईएफ एक बेहतर क्वेरी नहीं करेगा। यही कारण है कि मैं पूछ रहा था कि क्या मुझे एक छोटी इकाई बनाना चाहिए या "मैपिंग" करने के लिए क्वेरी लिखना चाहिए। – Dismissile

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