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




entity-framework linq-to-sql (12)

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

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

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


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

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

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

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

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


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 से 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 पेश करना


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

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

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


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

आश्चर्य है कि nHibernate, या OpenAccess के साथ क्या हो रहा है ...


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

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

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

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

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

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


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

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

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

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


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

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


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


LINQ से एसक्यूएल सचमुच मृत है? InfoQ.com के लिए जोनाथन एलन द्वारा

मैट वॉरेन ने [LINQ से SQL] का वर्णन कुछ ऐसा किया है जो "कभी अस्तित्व में नहीं था।" अनिवार्य रूप से, यह वास्तविक ओआरएम तैयार होने तक LINQ विकसित करने में उनकी सहायता के लिए स्टैंड-इन होना चाहिए था।

...

एंटिटी फ्रेमवर्क के पैमाने ने इसे .NET 3.5 / विजुअल स्टूडियो 2008 की समयसीमा याद करने का कारण बना दिया। यह दुर्भाग्य से नामित ".NET 3.5 सर्विस पैक 1" के लिए समय पर पूरा हो गया था, जो सर्विस पैक की तुलना में एक प्रमुख रिलीज की तरह था।

...

जटिलताओं की वजह से डेवलपर्स [एडीओ.NET इकाई फ्रेमवर्क] पसंद नहीं करते हैं।

...

.NET 4.0 के रूप में, LINQ से इकाइयों को LINQ के परिदृश्यों को सुलझाने के लिए अनुशंसित डेटा एक्सेस समाधान होगा।








linq-to-sql