.net LINQ से एसक्यूएल बनाम इकाई फ्रेमवर्क




entity-framework linq-to-sql (14)

अब .NET v3.5 SP1 जारी किया गया है (VS2008 SP1 के साथ), अब हमारे पास .NET इकाई ढांचे तक पहुंच है।

मेरा सवाल यह है। एक ओआरएम के रूप में इकाई फ्रेमवर्क और LINQ से SQL का उपयोग करने के बीच निर्णय लेने का प्रयास करते समय, क्या अंतर है?

जिस तरह से मैं इसे समझता हूं, एंटिटी फ्रेमवर्क (जब LINQ से Entities के साथ उपयोग किया जाता है) LINQ से SQL तक 'बड़ा भाई' है? यदि यह मामला है - इसमें क्या फायदे हैं? यह क्या कर सकता है कि LINQ से SQL अपने आप नहीं कर सकता है?


मुझे here एक बहुत अच्छा जवाब मिला जो बताता है कि सरल शब्दों में क्या उपयोग करना है:

अंगूठे का मूल नियम जिसके लिए ढांचे का उपयोग करना है, यह है कि अपनी प्रस्तुति परत में अपने डेटा को संपादित करने की योजना कैसे बनाएं।

  • लिंक-टू-एसक्यूएल - यदि आप अपनी प्रस्तुति परत में अपने डेटा के एक-से-एक संबंध को संपादित करने की योजना बनाते हैं तो इस ढांचे का उपयोग करें। मतलब है कि आप किसी एक दृश्य या पृष्ठ में एक से अधिक तालिका से डेटा को संयोजित करने की योजना नहीं बनाते हैं।

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

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

एल 2 एस पर ईएफ चुनने के शायद अधिक सटीक कारण हैं, लेकिन यह शायद समझने वाला सबसे आसान तरीका होगा। एल 2 एस में दृश्य प्रस्तुति के लिए डेटा मर्ज करने की क्षमता नहीं है।


मैंने पाया कि ईएफ का उपयोग करते समय मैं एक ही डेटाबेस मॉडल के भीतर कई डेटाबेस का उपयोग नहीं कर सका। लेकिन linq2sql में मैं केवल डेटाबेस नामों के साथ स्कीमा नामों को उपसर्ग कर सकता था।

यह मूल कारणों से linq2sql के साथ काम करना शुरू करने के कारणों में से एक था। मुझे नहीं पता कि ईएफ ने अभी तक इस कार्यक्षमता की अनुमति दी है, लेकिन मुझे यह याद रखना याद है कि इसका उद्देश्य यह नहीं था कि इसे अनुमति दें।


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

मेरे वर्तमान काम पर हमारे पास 200+ टेबल वाला डेटाबेस है। बहुत सारे पुराने समाधान वाले पुराने डेटाबेस, इसलिए मैं LINQ2Sql पर एंटीटी फ्रेमवर्क का लाभ देख सकता था लेकिन फिर भी मैं डेटाबेस को फिर से डिजाइन करना पसंद करूंगा क्योंकि डेटाबेस एप्लिकेशन का इंजन है और यदि डेटाबेस बुरी तरह डिज़ाइन किया गया है और धीमा है तो मेरा आवेदन धीमा भी होगा। ऐसे डेटाबेस पर एंटीटी फ्रेमवर्क का उपयोग करना खराब मॉडल को छिपाने के लिए एक क्विकफिक्स जैसा लगता है लेकिन यह ऐसे डेटाबेस से आपको खराब प्रदर्शन को कभी छिपा नहीं सकता है।


LINQ से SQL और इकाई फ्रेमवर्क सतह पर समान दिखते हैं। वे दोनों एक डेटा मॉडल का उपयोग कर डेटाबेस के खिलाफ LINQ पूछताछ प्रदान करते हैं।

LINQ से SQL को LINQ प्रोजेक्ट से विकसित किया गया, जो भाषा विकास के साथ काम करने वाली टीम से बाहर आया। जबकि इकाई फ्रेमवर्क डेटा प्रोग्राममेबिलिटी टीम की एक परियोजना थी और एंटीटी एसक्यूएल भाषा पर केंद्रित थी। माइक्रोसॉफ्ट को LINQ से SQL को कम करने का कोई इरादा नहीं है।

LINQ से SQL अभी भी ADO.NET का हिस्सा है जबकि इकाई फ्रेमवर्क में अलग API है। इकाई ढांचा LINQ से SQL का उच्च संस्करण है। एंटीटी फ्रेमवर्क आपके एप्लिकेशन और आपके डेटा स्टोर के बीच ब्रिजिंग के लिए एंटीटी डेटा मॉडल का उपयोग करता है। यह एंटिटी डेटा मॉडल या ईडीएम है, जो आपके वैचारिक स्कीमा के साथ-साथ डाटाबेस स्कीमा जानकारी को डेटाबेस के साथ बातचीत करने के लिए आवश्यक है और आखिरकार मैपिंग स्कीमा जो दो से लिंक करता है।

एंटीटी फ्रेमवर्क (एंटिटी डेटा मॉडल) द्वारा किए गए कुछ कार्य यहां दिए गए हैं।

• मॉडल से कक्षाओं को स्वचालित रूप से उत्पन्न करता है और जब भी मॉडल बदलता है तो गतिशील रूप से उन वर्गों को अद्यतन करता है।

• सभी डेटाबेस कनेक्टिविटी का ख्याल रखता है ताकि डेवलपर्स डेटाबेस के साथ बातचीत के लिए बहुत सारे कोड लिखकर बोझ न हों।

• मॉडल से पूछताछ के लिए सामान्य क्वेरी सिंटैक्स प्रदान करता है, डेटाबेस नहीं, और फिर इन प्रश्नों को क्वेरी में समझता है जो डेटाबेस समझ सकता है।

• मॉडल की वस्तुओं में परिवर्तनों को ट्रैक करने के लिए एक तंत्र प्रदान करता है क्योंकि उनका उपयोग अनुप्रयोगों में किया जा रहा है और डेटाबेस को अद्यतनों को संभालता है।


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

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

हम पूरी तरह से इस सुविधा के लिए, इकाई फ्रेमवर्क पर स्विच करने के बारे में सोच रहे हैं। यह एक शर्म की बात है कि माइक्रोसॉफ्ट ने लिंक-टू-एसक्यूएल में एसिंक समर्थन लागू नहीं किया है (या इसे खोल दिया गया है, इसलिए समुदाय इसे कर सकता है)।


LINQ करने वाली एसक्यूएल

यह प्रदाता है यह केवल SQL सर्वर का समर्थन करता है। यह .NET ऑब्जेक्ट्स को SQL सर्वर डेटाबेस टेबल मैप करने के लिए मैपिंग तकनीक है। माइक्रोसॉफ्ट का ओआरएम - ऑब्जेक्ट-रिलेशनल मैपर में पहला प्रयास है।

LINQ करने वाली संस्थाओं

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

मेरे व्यक्तिगत अनुभव के मुताबिक एफ़ बेहतर है (यदि आपको एसक्यूएल के बारे में कोई जानकारी नहीं है) LINQ में प्रदर्शन थोड़ा तेज़ है क्योंकि ईएफ कारण लैम्बडा में लिखी गई LINQ भाषा की तुलना में थोड़ा तेज़ है।


मुझे लगता है कि अगर आपको मध्य में कोई अजीब चीज़ों के साथ कुछ जल्दी विकसित करने की आवश्यकता नहीं है, और आपको अपनी तालिकाओं का प्रतिनिधित्व करने वाली संस्थाओं की सुविधा की आवश्यकता है:

Linq2Sql एक अच्छा सहयोगी हो सकता है, इसका उपयोग LINQ के साथ एक महान विकासशील समय को उजागर करता है।



उस लेख में उल्लिखित कई स्पष्ट मतभेद हैं @lars पोस्ट किया गया है, लेकिन संक्षिप्त जवाब है:

  • एल 2 एस कसकर युग्मित है - डेटाबेस के विशिष्ट क्षेत्र में ऑब्जेक्ट प्रॉपर्टी या एक विशिष्ट डेटाबेस स्कीमा पर मैपिंग का सही ढंग से ऑब्जेक्ट करें
  • एल 2 एस केवल SQL सर्वर के साथ काम करेगा (जहां तक ​​मुझे पता है)
  • ईएफ एक वर्ग को कई तालिकाओं में मैप करने की अनुमति देता है
  • ईएफ एमएम संबंधों को संभालेगा
  • ईएफ में किसी भी ADO.NET डेटा प्रदाता को लक्षित करने की क्षमता होगी

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


यदि आपका डेटाबेस सरल और सरल है, LINQ से SQL करेगा। यदि आपको अपनी टेबल के शीर्ष पर तार्किक / सारणीकृत इकाइयों की आवश्यकता है, तो इकाई फ्रेमवर्क के लिए जाएं।


LINQ से SQL केवल Microsoft SQL सर्वर में उपलब्ध डेटाबेस टेबल, दृश्य, स्पॉक्स और फ़ंक्शंस के 1 से 1 मैपिंग का समर्थन करता है। यह अपेक्षाकृत अच्छी तरह से डिज़ाइन किए गए SQL सर्वर डेटाबेस के लिए त्वरित डेटा पहुंच निर्माण के लिए उपयोग करने के लिए एक महान एपीआई है। LINQ2SQL को पहले सी # 3.0 और नेट फ्रेमवर्क 3.5 के साथ रिलीज़ किया गया था।

LINQ से Entities (ADO.Net Entity Framework) एक ओआरएम (ऑब्जेक्ट रिलेशनल मैपर) एपीआई है जो ऑब्जेक्ट डोमेन मॉडल की विस्तृत परिभाषा और कई अलग-अलग ADO.Net डेटा प्रदाताओं को उनके रिश्तों की अनुमति देता है। इस प्रकार, आप कई अलग-अलग डेटाबेस विक्रेताओं, अनुप्रयोग सर्वर या प्रोटोकॉल को मिश्रित कर सकते हैं ताकि ऑब्जेक्ट्स के एक समेकित मैश-अप को डिज़ाइन किया जा सके जो विभिन्न प्रकार के टेबल, स्रोत, सेवाएं इत्यादि से बने हैं। ADO.Net Framework को जारी किया गया था नेट फ्रेमवर्क 3.5 एसपी 1।

यह एमएसडीएन पर एक अच्छा प्रारंभिक लेख है: संबंध डेटा के लिए LINQ पेश करना


यहां दिए गए उत्तरों में लिंक 2 एसक्यूएल और ईएफ के बीच कई अंतर शामिल हैं, लेकिन एक महत्वपूर्ण बिंदु है जिसे अधिक ध्यान नहीं दिया गया है: लिंक 2 एसक्यूएल केवल SQL सर्वर का समर्थन करता है जबकि ईएफ में निम्नलिखित आरडीबीएमएस के लिए प्रदाता हैं:

माइक्रोसॉफ्ट द्वारा प्रदान किया गया:

  • एसक्यूएल सर्वर, ओबीडीसी और ओएलई डीबी के लिए ADO.NET ड्राइवर

तीसरे पक्ष के प्रदाताओं के माध्यम से:

  • माई एसक्यूएल
  • आकाशवाणी
  • डीबी 2
  • VistaDB
  • SQLite
  • PostgreSQL
  • इन्फोर्मिक्स
  • यू 2
  • Sybase
  • Synergex
  • Firebird
  • Npgsql

कुछ नाम है।

यह ईएफ को आपके रिलेशनल डेटा स्टोर पर एक शक्तिशाली प्रोग्रामिंग अबास्ट्रक्शन बनाता है, जिसका अर्थ है कि डेवलपर्स के पास अंतर्निहित डेटा स्टोर के बावजूद काम करने के लिए एक सतत प्रोग्रामिंग मॉडल है। यह उन परिस्थितियों में बहुत उपयोगी हो सकता है जहां आप ऐसे उत्पाद को विकसित कर रहे हैं जिसे आप सुनिश्चित करना चाहते हैं कि सामान्य आरडीबीएमएस की विस्तृत श्रृंखला के साथ अंतःक्रिया हो।

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


मुझे लगता है कि त्वरित और गंदा जवाब यह है

  • LINQ से SQL करने के लिए यह करने का तेज़ और आसान तरीका है। इसका मतलब है कि आप जल्दी जा रहे हैं, और अगर आप कुछ छोटे पर काम कर रहे हैं तो तेज़ी से पहुंचे।
  • एंटिटी फ्रेमवर्क इसे करने के लिए ऑल-आउट, नो-होल्ड-अवरुद्ध तरीका है। इसका मतलब है कि यदि आप कुछ बड़े काम कर रहे हैं तो आप अधिक समय ले लेंगे, धीरे-धीरे विकसित करेंगे, और अधिक लचीलापन लेंगे।

LINQ से एसक्यूएल

  1. समरूप डेटासोर्स: एसक्यूएल सर्वर
  2. छोटी परियोजनाओं के लिए अनुशंसित केवल तभी डेटा संरचना अच्छी तरह डिज़ाइन की गई है
  3. मैकिंग को SqlMetal.exe के साथ पुन: सम्मिलित किए बिना बदला जा सकता है
  4. .dbml (डेटाबेस मार्कअप भाषा)
  5. टेबल और कक्षाओं के बीच एक-से-एक मैपिंग
  6. TPH विरासत का समर्थन करता है
  7. जटिल प्रकार का समर्थन नहीं करता है
  8. भंडारण-पहला दृष्टिकोण
  9. डेटाबेस का डाटाबेस केंद्रित दृश्य
  10. सी # टीम द्वारा बनाया गया
  11. समर्थित लेकिन आगे के सुधारों का इरादा नहीं है

इकाई की रूपरेखा

  1. हीटरोजेनेस डेटासोर्स: कई डेटा प्रदाताओं का समर्थन करें
  2. सभी नई परियोजनाओं के लिए अनुशंसित:
    • छोटे वाले (LINQ से SQL)
    • जब डेटा स्रोत एक फ्लैट फ़ाइल (ADO.NET) है
  3. मैपिंग को मॉडलिंग और मैपिंग फाइलों को सेट करते समय पुन: सम्मिलित किए बिना बदला जा सकता है मेटाडेटा आर्टिफैक्ट प्रक्रिया आउटपुट निर्देशिका में कॉपी करने की प्रक्रिया
  4. .edmx (इकाई डेटा मॉडल) जिसमें निम्न शामिल हैं:
    • एसएसडीएल (स्टोरेज स्कीमा परिभाषा भाषा)
    • सीएसडीएल (अवधारणात्मक स्कीमा परिभाषा भाषा)
    • एमएसएल (मैपिंग विशिष्टता भाषा)
  5. तालिकाओं और कक्षाओं के बीच एक-से-एक, कई से एक मैपिंग
  6. विरासत का समर्थन करता है:
    • टीपीएच (प्रति पदानुक्रम तालिका)
    • टीपीटी (प्रति प्रकार तालिका)
    • टीपीसी (तालिका प्रति कंक्रीट कक्षा)
  7. जटिल प्रकार का समर्थन करता है
  8. कोड-फर्स्ट, मॉडल-फर्स्ट, स्टोरेज-पहला दृष्टिकोण
  9. डेटाबेस के अनुप्रयोग केंद्रित दृश्य
  10. एसक्यूएल सर्वर टीम द्वारा बनाया गया
  11. माइक्रोसॉफ्ट डेटा एपीआई का भविष्य

यह भी देखें:







linq-to-sql