क्या हमें एंटिटी फ्रेमवर्क का उपयोग करना चाहिए?


31

वर्तमान में हमारे पास निम्नलिखित स्टैक हैं:

  • वीएस 2005
  • वेब प्रपत्र
  • SQL सर्वर 2005
  • IIS 6

हम इस पर परिवर्तन करने की योजना बना रहे हैं:

  • वीएस 2010
  • एमवीसी और वेब फॉर्म
  • SQL सर्वर 2008
  • IIS 7

मेरा प्रश्न है, जब हम वीएस 2010 के साथ एमवीसी में जाते हैं, तो क्या हमें एंटिटी फ्रेमवर्क (या अन्य ओआरएम), एक माइक्रो ओआरएम (जैसे बड़े पैमाने पर ), या सिर्फ सादे एसक्यूएल का उपयोग करना चाहिए ?

वीएस 2010 के बारे में मैंने जो भी ट्यूटोरियल पढ़े हैं, वे सभी डेटा लेनदेन के लिए एंटिटी फ्रेमवर्क का उपयोग करने की दिशा में सक्षम हैं, लेकिन क्या यह भविष्य के भविष्य (5+ वर्ष) के लिए होने वाला है?

अगर यह मायने रखता है, तो हमारे क्लाइंट के एप्लिकेशन 10 - 1,000 सक्रिय उपयोगकर्ताओं से कहीं भी हो सकते हैं।


क्या आप वर्तमान में Linq-to-SQL का उपयोग कर रहे हैं?
मॉर्गन हेरलॉकर

हम
गनोम

4
अपने भविष्य के विकास में सीधे SQL का उपयोग करने से बचें। ORM या EF लगभग एक होना चाहिए। अपने डेटा एक्सेस लेयर की रणनीति बनाने के लिए कुछ समय समर्पित करें। यह एक महत्वपूर्ण निर्णय है और यह एक तुच्छ कार्य नहीं है। सुनिश्चित करें कि आपके पास इसे सीखने के लिए आपके और टीम के लिए पर्याप्त समय है। टीम को नई कोर प्रौद्योगिकी का परिचय प्रबंधित किया जाना चाहिए। उपकरण चुनें, सामग्री चुनें, कुछ शिक्षा लें, ..., फिर मूल्यांकन करें और निर्णय लें।
NoChance

2
नए या मौजूदा डेटाबेस? संभावित रूप से EF के सम्मेलनों के साथ एक नया DB बनाने के बीच एक बड़ा अंतर है, और एक मौजूदा DB के शीर्ष पर EF को वापस लाने की कोशिश कर रहा है जो ORM के लिए नहीं बनाया गया था।
rmac

@rmac यह एक नए डेटाबेस के लिए था।
गनीम

जवाबों:


45

मैंने हाल ही में इन-लाइन SQL प्रश्नों का उपयोग करके EF का उपयोग किया है और यहाँ जो मैंने पाया है:

पेशेवरों

  • बहुत तेजी से दाल बनाने के लिए (एसक्यूएल प्रश्नों को लिखना पसंद नहीं है!)
  • बनाए रखने के लिए बहुत आसान है
  • इन-लाइन sql स्टेटमेंट बनाने से पहले मेरे इनपुट को पार्स करने के लिए याद रखने की आवश्यकता नहीं है, जिसका मतलब है कि SQL इंजेक्शन हमले की संभावना कम है (बेशक, यह अभी भी आपके प्रश्नों के आधार पर संभव है, लेकिन बहुत कम संभावना है)

विपक्ष

  • एकाधिक डेटाबेस नहीं कर सकते ... कम से कम आसानी से नहीं
  • सभी संस्थाओं (तालिकाओं, विचारों आदि) को एक प्राथमिक कुंजी की आवश्यकता होती है
  • यदि आप किसी एकल स्तंभ को 100+ आवश्यक कॉलम तालिका (मेरी तालिका डिज़ाइन नहीं) में अपडेट करना चाहते हैं, तो आपको अपडेट करने के लिए सभी 100 कॉलम नीचे खींचने होंगे। या एक संग्रहीत प्रक्रिया का उपयोग करें।
  • मेरे पास SQL ​​सर्वर पर परिभाषित कुछ डिफ़ॉल्ट मानों के साथ समस्याएँ हैं जो एक नया रिकॉर्ड जुड़ने के बाद इकाई मॉडल में नहीं खींची जा रही हैं। आमतौर पर यह गणना मूल्यों या मूल्यों के साथ होता है जो INSERT ट्रिगर में जुड़ जाते हैं
  • अवसर पर, SQL क्वेरी बुरी तरह से लिखी जाती हैं और निष्पादित करने में धीमी होती हैं। यदि आपके पास धीमी गति से चलने वाली क्वेरी है, तो EF क्या कर रहा है यह देखने के लिए SQL ट्रेस चलाएँ। यह संभव है कि आप उस क्वेरी को एसपी या व्यू के रूप में फिर से काम कर सकें। हालांकि ऐसा अक्सर नहीं होता है।
  • मेरे पास कुछ मुद्दों के साथ तालिकाओं के बीच एक संघ बनाने की कोशिश कर रहा है जिसमें SQL सर्वर में परिभाषित विदेशी कुंजी नहीं है। आमतौर पर ऐसा इसलिए है क्योंकि मैं एक ऐसा 1:0-1रिश्ता बनाने की कोशिश कर रहा हूं जहां ईएफ का उपयोग करना चाहता है1:0-*

मैं हालांकि कोई ईएफ विशेषज्ञ नहीं हूं, इसलिए मैं शायद कुछ चीजों से चूक गया। ये केवल वे आइटम हैं जिन्हें मैं जानता हूं कि मैं इनलाइन एसक्यूएल से एंटिटी फ्रेमवर्क पर स्विच करते समय अतीत में सामना कर चुका हूं। मुझे खुशी है कि मैंने स्विच बनाया है, लेकिन कई बार ऐसा हुआ है जब मुझे वास्तव में ईईएफ से नफरत है।


7
विस्तृत और संगठित उत्तर के लिए +1। "सभी संस्थाओं (तालिकाओं, विचारों, आदि) को एक प्राथमिक कुंजी की आवश्यकता है" एक कॉन के बजाय एक उचित प्रतिबंध की तरह लगता है।
NoChance

2
@EmmadKareem यदि डेटाबेस पर आपका नियंत्रण है, तो यह एक ठीक प्रतिबंध है, लेकिन यदि आप 3rd पार्टी डेटाबेस के साथ काम कर रहे हैं, या विचारों के साथ, यह थोड़ा कष्टप्रद हो सकता है
राहेल 2

1
बस डिस्कनेक्ट एन-टियर वेब ऐप में ईएफ का उपयोग करने की कोशिश करें - एक सत्र और एमएम रिश्तों में संस्थाओं को अपडेट करना, हम्म्म्म क्या मज़ा है!
विदर्भ

5
@EmmadKareem संस्थाओं को वास्तव में एक मूल्यवान प्राथमिक कुंजी की आवश्यकता है - समग्र कुंजियों का उपयोग करना ईएफ में एक बुरा सपना है। यह एक उचित प्रतिबंध के बजाय एक चुनाव है।
कर्क ब्रॉडहर्स्ट

1
मैं कहता हूं कि सुरक्षा एक और मुद्दा है। कई लोग सोचते हैं कि सभी डीबी पहुंच को संग्रहीत प्रक्रियाओं से गुजरना चाहिए, जो डीके से जुड़ी भूमिकाओं के साथ तय करते हैं कि लॉगिन क्या संग्रहीत प्रोकोस को निष्पादित कर सकता है। यह प्रश्न बनाने के लिए EF / LINQ को नियमित करता है। मैंने EF का उपयोग किया है, लेकिन उन ग्राहकों ( खाँसी Microsoft) के पास आया है जिनके पास ये सुरक्षा आवश्यकताएँ थीं
मिक

12

एंटिटी फ्रेमवर्क एक उत्पादकता उपकरण है। जब तक आपके पास एक अच्छा कारण नहीं है (जैसे कि आप एसक्यूएल 2000 पर हैं या प्रौद्योगिकी पर रैंप करने का समय नहीं है), तो अपने निपटान में सर्वोत्तम टूल का उपयोग करें।

कहा जा रहा है, मुझे MVC पैटर्न के मॉडल में बहुत अच्छी तरह से अनुवाद करने के लिए Entities की अवधारणा मिलती है। मॉडल और तालिकाओं के साथ 1: 1 संबंध रखने के दौरान एक बुरा व्यवहार होता है, एंटिटीज के संदर्भ में स्वच्छ डिजाइन तैयार करना आसान है, कोड पढ़ना आसान है (विशेष रूप से लिनक्यू के साथ)।

इकाई फ्रेमवर्क Microsoft द्वारा सक्रिय रूप से समर्थित है। किसी के पास "समर्थन करने के लिए एक्स साल होगा" कहने के लिए एक जादू की क्रिस्टल बॉल नहीं है। मुझे विश्वास है कि अगले 5 वर्षों में एंटिटी की मृत्यु हो जाएगी।


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

3
Slomojo, आप 'मृत' शब्द की दुनिया के बाकी हिस्सों से एक अलग परिभाषा हो सकती है। क्योंकि LinqToSql को अभी सक्रिय रूप से विकसित नहीं किया जा रहा है। आप अभी से इसे 10-20 साल तक इस्तेमाल कर पाएंगे।
बोरिस यान्कोव

4

एक अन्य संभावित समाधान एक वैकल्पिक एंटिटी फ्रेमवर्क लाइब्रेरी का उपयोग करना है जो कि वीएस के साथ आपूर्ति नहीं की गई है वेब पर कुछ बाहर हैं।

Entity / 3 लेयर्स फ्रेमवर्क कॉन्सेप्ट, थोड़ी देर के लिए वहां से बाहर हो गया है, और कई कस्टम डेवलपर्स के साथ कई अन्य डेवलपर्स की तरह काम किया है, इससे पहले कि Microsoft ने अपना "आधिकारिक" ढांचा जारी किया।

पेशेवरों

Microsoft निरंतर पुस्तकालयों / ढांचे में परिवर्तन के बिना अटक गए (इकाई) ढांचे के लाभ हैं।

एक पुस्तकालय में ऐसी सुविधाएँ जोड़ना जो शायद मौजूदा आधिकारिक पुस्तकालय के लिए उपलब्ध नहीं हैं, जैसे कि कई dtabase ब्रांडों का उपयोग करना।

विपक्ष

पुस्तकालय या उपकरण का समर्थन करना है। एनिटाइट्स उत्पन्न करने के लिए एंटिटी जनरेटर कोड टूल होना बहुत आम है।


मुझे यह उत्तर बहुत भ्रामक लगता है। केवल एक एंटिटी फ्रेमवर्क है (बड़े अक्षरों के साथ) जो एक Microsoft उपज है। क्या आपका मतलब है "अन्य ऑब्जेक्ट रिलेशनल मैपर का उपयोग करें"? Entity Framework कोई सामान्य शब्द नहीं है - यह Microsoft के ORM का नाम है।
निकग

सोचा गया कि "Microsoft एंटिटी फ्रेमवर्क" है, "एंटिटी फ्रेमवर्क" की अवधारणा कई वर्षों से है।
umlcat

3

आपको समस्या और मौजूदा समाधान के आधार पर एक वास्तु निर्णय लेना होगा। किसी भी तकनीक के साथ फायदे और नुकसान हैं।

मैं व्यक्तिगत रूप से नए विकास के लिए सामान्य रूप से इकाई ढांचे का उपयोग करूंगा लेकिन मौजूदा कोड को फिर से लिखना नहीं करूंगा। फिर आपको भविष्य की ख़राबी के लिए गति मिलती है लेकिन न ही बहुत सारे समय के लिए कोड परिवर्तित करना पड़ता है। उस दृष्टिकोण का नकारात्मक पक्ष यह है कि संगति को कम करता है।


3
वर्किंग कोड को फिर से लिखने की अनुशंसा नहीं करने के लिए +1।
NoChance

2

आपकी स्थिति में मैं निश्चित रूप से एंटिटी फ्रेमवर्क का उपयोग करूंगा, मैंने पाया है कि यह एमवीसी के साथ अच्छा काम करता है।
यहाँ कुछ वास्तविक कारण और संकेत दिए गए हैं।

  • Linq उपयोग करने के लिए एक खुशी है, और विलंबित निष्पादन भी अत्यंत उपयोगी है।
  • आप अपने मॉडल जेनरेट कर सकते हैं (हालाँकि mvc के साथ उपयोग करने के बाद मैं आपको डेटा मॉडल के साथ संयोजन में व्यू मॉडल का उपयोग करता हूं, इससे सत्यापन और मॉडल बाइंडिंग बहुत आसान हो जाता है, अगर आप ऐसा करते हैं तो अपने दृष्टिकोण में परिवर्तन को मैप करने के लिए ऑटोमैटर का उपयोग करें। डेटा मॉडल)।

हालाँकि, ORM का उपयोग करने के लिए आपको बहुत सी चीज़ें सीखनी होंगी।

  • आपके लिए क्या संदर्भ है (इकाई ट्रैकिंग)
  • उस संदर्भ को कार्य की इकाई के रूप में उपयोग किया जाना चाहिए
  • कंसीडर के बारे में बात करना याद रखें, EF आपको बता सकता है कि आपका ऑब्जेक्ट कब आउट हो गया है, लेकिन यह मुश्किल हो सकता है अगर आप कंसीडर को रिक्वेस्ट के दौरान ठीक से हैंडल करना चाहते हैं (जैसा कि आपको टाइमस्टैम्प या कुछ और रखने की जरूरत है)।

विचार करने के लिए बातें

  • ट्रिगर और ORM एक साथ काम नहीं करते हैं, इसके बजाय ORM घटनाओं का उपयोग करें।
  • सुनिश्चित करें कि आपके सभी टेबल्स में प्रॉमिस कीज़ हैं।

यदि आप एक मौजूदा डेटाबेस रखते हैं, तो भी मैं अत्यधिक कोड पहले दृष्टिकोण की सिफारिश करूंगा।

  • सम्मेलनों का मतलब है कि जब आप डेटाबेस बदलते हैं तो आपको मैपिंग या कक्षाएं फिर से कराने की आवश्यकता नहीं होती है।
  • यह मॉडल में सत्यापन और अन्य तर्क रखने के लिए उत्सुक है।
  • यदि आपके पास एक विशाल मौजूदा डेटाबेस है, तो उन्हें बनाने में मदद करने के लिए आप कोड जनरेटर का उपयोग कर सकते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.