7

MSDN के अनुसार DbSet:मुझे अपने ईएफ के शीर्ष पर काम की इकाई के साथ एक भंडार पैटर्न क्यों बनाना चाहिए?

DbSet<TEntity> Class 

एक DbSet represents the collection of all entities in the context, या कि किसी दिए गए प्रकार के डेटाबेस से पूछे जा सकता है। DbSet ऑब्जेक्ट्स DbContext.Set विधि का उपयोग कर डीबीकॉन्टेक्स्ट से बनाए गए हैं।


और MSDN DbContext के अनुसार:

DbContext Class 

एक DbContext instance represents a combination of the Unit Of Work and Repository patterns ऐसी है कि वह एक साथ एक डेटाबेस और समूह से परिवर्तन है कि उसके बाद हो जाएगा क्वेरी करने के लिए इस्तेमाल किया जा सकता एक इकाई के रूप में स्टोर पर वापस लिखा गया। डीबीकॉन्टेक्स्ट अवधारणात्मक रूप से ऑब्जेक्ट कॉन्टेक्स्ट के समान है।


ताकि EFrepository pattern और UOW आंतरिक रूप से उपयोग करें।

DbSet < ----> भंडार

DbContext < ----> कार्य

मैं क्यों की चोटी पर काम का एक यूनिट के साथ एक भंडार पैटर्न बनाने चाहिए की इकाई मेरा ईएफ?

+2

आपको नहीं करना चाहिए। हालांकि एक सेवा परत जहां आप अपने व्यापार तर्क को मजबूत कर सकते हैं बुद्धिमान है। – Shoe

उत्तर

7

मुझे अपने ईएफ के शीर्ष पर काम की इकाई के साथ एक भंडार पैटर्न क्यों बनाना चाहिए?

इस पर निर्भर करता है कि आप अपनी निर्भरताओं को कैसे प्रबंधित करना चाहते हैं।

यदि इकाई फ्रेमवर्क आपकी अमूर्त परत है और डेटाबेस स्वयं निर्भरता है, तो इकाई फ्रेमवर्क वास्तव में आपके भंडार और काम की इकाई प्रदान करता है। व्यापार-बंद यह है कि आपका डोमेन एंटिटी फ्रेमवर्क पर निर्भर करता है। जब तक कि निर्भरता स्वीकार्य है, आप अच्छे हैं।

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

असल में, यह सब नीचे आता है कि आप "बाहरी निर्भरता" की रेखा को आकर्षित करते हैं या नहीं। कुछ परियोजनाओं यह कोई बात नहीं, कुछ के लिए यह शारीरिक डेटाबेस है, कुछ के लिए के लिए यह डेटा का उपयोग ढांचे, आदि

+0

ग्रेट, कभी-कभी हमें कक्षा को स्पष्ट रूप से बनाने के लिए EntityTypeMapping का उपयोग करना चाहिए। (FluentAPI का उपयोग करके)। फिर हम डोमेन इकाई का उपयोग कर सकते हैं और EntityFramework – huoxudong125

7

क्यों मैं के शीर्ष पर काम का एक यूनिट के साथ एक भंडार पैटर्न का निर्माण करना चाहिए मेरी एफई?

Interface Segregation Principle की वजह से।DbSet और DbContext में विधि हस्ताक्षर मूल रूप से एक बड़ी निम्न-स्तरीय गड़बड़ी हैं, उनके बीच एक बड़ा विसंगति है और आम तौर पर एक रिपोजिटरी और कार्य इकाई की अपेक्षा की जाती है। दूसरे शब्दों में, यदि आप सीधे DbSet और DbContext का उपयोग करते हैं, तो आपका एप्लिकेशन सेवा कोड लीकी अबास्ट्रक्शन से ग्रस्त होगा।

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

+0

का संदर्भ देने की आवश्यकता नहीं है, मुझे लगता है कि यह वास्तविक कारण है। लेकिन कभी-कभी हमें रिपोजिटरी और यूओडब्ल्यू की आवश्यकता नहीं होती है, अगर हमारी परियोजना छोटी या सरल है। हम सीधे डीबीकॉन्टेक्स्ट का संदर्भ दे सकते हैं। – huoxudong125

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