दिलचस्प पोस्ट
जावास्क्रिप्ट में एक परिभाषित चर की जांच कैसे करें क्या Windows कमांड लाइन पर 'कौन सा' है? 'सिंक्रनाइज़' का मतलब क्या है? त्रिकोणमितीय कार्य कैसे कार्य करते हैं? सभी ब्राउज़रों के लिए Object.watch ()? जावा: पार्स ईआर वैल्यू से एक चार यूटीएफ -8 एनकोडेड एनएसडीटा को एनएसएसटीइंग में कनवर्ट करें जब जावास्क्रिप्ट तुल्यकालिक है? jQuery के साथ addClass / removeClass एनिमेटिंग सी # के लिए कोई सीएसएस पार्सर है? क्या टाइप किया गया है और # ग में ही परिभाषित? कुछ अच्छा पायथन ओआरएम समाधान क्या हैं? आईओओ – कोकाओपोड के साथ बिल्ड विफल रहता है हेडर फाइल नहीं मिल सकती क्रोम डेस्कटॉप अधिसूचना उदाहरण क्या SPARQL में आरडीएफ संग्रह में एक तत्व की स्थिति प्राप्त करना संभव है?

इकाई फ़्रेमवर्क बनाम LINQ से SQL

अब जब .NET v3.5 SP1 जारी किया गया है (वीएस 2008 एसपी 1 के साथ), अब हमारे पास एनएटी एंटिटी फ्रेमवर्क तक पहुंच है।

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

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

वेब के समाधान से एकत्रित समाधान "इकाई फ़्रेमवर्क बनाम LINQ से SQL"

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

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

यह MSDN पर एक अच्छा परिचयात्मक लेख है: LINQ से रिलेशनल डेटा को प्रस्तुत करना

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

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

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

मैट वॉरेन ने [LINQ to SQL] का वर्णन किया है कि "कभी भी अस्तित्व में नहीं था।" अनिवार्य रूप से, यह सिर्फ वास्तविक ORM तैयार होने तक LINQ विकसित करने में उनकी मदद करने के लिए स्टैंड-इन होना चाहिए।

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

जटिलताओं की वजह से डेवलपर्स को पसंद नहीं है [एडीओनेट एंटिटी फ़्रेमवर्क]

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

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

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

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

इकाई फ़्रेमवर्क के साथ मेरा अनुभव तारकीय से कम रहा है सबसे पहले, आपको ईएफ बेस क्लास से वंचित होना है, इसलिए पीओसीओ से अलविदा कहें। आपका डिज़ाइन ईएफ के आसपास होगा LinqtoSQL के साथ मैं अपने मौजूदा व्यापारिक वस्तुओं का उपयोग कर सकता हूं। इसके अतिरिक्त, कोई आलसी लोडिंग नहीं है, आपको खुद को लागू करना होगा वहाँ कुछ काम POCOs और आलसी लोडिंग का उपयोग करने के लिए बाहर हैं, लेकिन वे IMHO मौजूद हैं क्योंकि ईएफ अभी तक तैयार नहीं है मैं इसे 4.0 के बाद वापस आने की योजना बना रहा हूं

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

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

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

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

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

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

LINQ से SQL

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

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

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

यह भी देखें:

  • LINQ से एसक्यूएल वी एस इकाई फ़्रेमवर्क
  • LINQ से SQL और इकाई फ़्रेमवर्क के बीच अंतर
  • इकाई फ़्रेमवर्क बनाम LINQ TO SQL

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

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

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

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

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

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

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

कुछ नाम है।

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

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

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

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

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

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

पता है कि एनएचइबरनेट, या ओपन एवेस के साथ क्या हो रहा है …

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

Linq2Sql एक अच्छा संबद्ध हो सकता है, इसका उपयोग करके LinQ एक महान विकासशील समय को खोलता है।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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