इकाई के लिए इकाई फ्रेमवर्क बनाम LINQ


828

अब जब .NET v3.5 SP1 जारी किया गया है (VS2008 SP1 के साथ), तो अब हमारे पास .NET इकाई फ्रेमवर्क है।

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

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


138
मुझे लगता है कि नीचे दिए गए उत्तरों की फिर से जांच की जानी चाहिए क्योंकि लंबे समय से ईएफ जारी होने के बाद, इसलिए यहां आने वाले नए डेवलपर्स को गलत प्रभाव मिल सकता है। ईएफ अपने शुरुआती रिलीज के बाद से एक महान और आसान उपकरण बन गया। आप बस DB के लिए कनेक्शन सेट करते हैं और यह आपकी ज़रूरत के 90% की तरह है। बहुत तेजी से विकास, अनुभवी दृष्टिकोण से! वहां से - LINQ आपका सबसे अच्छा दोस्त है। यह अत्यधिक अनुकूलन योग्य है, एमवीसी सिर्फ इसे प्यार करता है, और लोगों से कहता है कि यह बुरा है - जानें कि इसे पहले कैसे इस्तेमाल करें (और LINQ पर भी पकड़ लें)!
कब्रगाह

10
बस इतना स्पष्ट है - ऐसा नहीं है कि आपके पास अभी विकल्प नहीं है - MSFT ने प्रभावी रूप से EF के पक्ष में LINQ2SQL को मार दिया। हालांकि, इस तथ्य से कि एमएसएफटी खुले-खट्टे ईएफ ने इसे कम चूसने में मदद की और निश्चित रूप से बेहतर हो रही है। लेकिन ईएफ में किसी के लिए भी - यह समझना सुनिश्चित करें कि ईएफ में अभी भी बहुत सारे प्रश्न हैं। मैंने लगभग एक पोस्ट किया है - stackoverflow.com/questions/305092/…
nikib3ro

4
@ kape123, (a) LINQ to SQL "डेड" नहीं है; यह अभी भी प्रयोग करने योग्य है; (b) LINQ to SQL विंडोज फोन 8 डेवलपमेंट में मानक डेटा एक्सेस विधि है।
रयान लुंडी

9
@ user3308043, [उद्धरण वांछित]।
रयान लुनडी

3
@Kyralessa - 2010 तक (.NET4.0 की रिलीज के साथ, मुझे सबसे हाल का उद्धरण मिल सकता है), एमएस ने स्वीकार किया कि , जबकि LINQ2SQL में कुछ निवेश किए जा सकते हैं, "हमारे समग्र निवेश का थोक इकाई में होगा फ्रेमवर्क। "
23

जवाबों:


483

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

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

MSDN पर यह एक अच्छा परिचयात्मक लेख है: LINQ to Relational Data का परिचय


ऐसा लगता है कि आप EQ में
पॉजिटिव

11
@CoffAddict, जबकि वे LINQ लैम्ब्डा का उपयोग करते हुए शैली में बहुत समान हैं, प्रत्येक एपीआई में पूरी तरह से अलग अंडरपिनिंग्स हैं। उदाहरण के लिए जिस तरह से LINQ2SQL SQL प्रश्न उत्पन्न करता है, SQL कार्यों के उपयोग की अनुमति देता है, जबकि L2E नहीं करता है, या कम से कम 2008 के रूप में नहीं था।
Kris

2
EF ऑब्जेक्ट ओरिएंटेड अप्रोच इसे उपयोग करने के लिए वास्तव में आसान और आश्वस्त बनाता है, इसे बहुत तेज़, प्रबंधित कोडित किया जा सकता है। मेरे लिए, डेटा को आरोपित करने का सबसे अच्छा तरीका है।
एंटोनी पेल्लेटियर

10
यह उत्तर अप्रचलित है। अब Linq to SQL एक2many मैपिंग का समर्थन करता है
जॉर्ज लैन्त्ज़

201

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

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

32
आप LF के साथ कोड की कम पंक्तियों को लिखने के लिए उसी चीज़ को पूरा करने की कोशिश करेंगे, जैसा कि आप EF के साथ करेंगे। EF में कोई आलसी लोडिंग का मतलब यह नहीं है कि आप हमेशा जाँच रहे हैं कि कुछ लोड किया गया था या नहीं।
पॉल मेंडोजा

ब्रैड, आप एक ईकॉमर्स साइट के लिए क्या सुझाव देंगे? मेरा मतलब है कि मैं साधारण CRUDs के अलावा कुछ भी नहीं देख सकता ...
पॉजिटिव

2
@ कॉफ़ीअदालत स्पष्ट रूप से, सबसे अधिक वोट किए गए उत्तर के शीर्ष 3 में साधारण CRUD के लिए L2S कहते हैं
IsmailS

11
.NET 4.0 में EF के साथ @Banford मुझे लगता है कि यह L2S से बेहतर है। वे सुविधाएँ जो EF से 3.5 में गायब थीं जिन्हें L2S ने .NET 4.0 में EF में जोड़ दिया था। .NET 4.0 में EF में अब आपके LINQ स्टेटमेंट L2S के समान ही दिखने वाले हैं। ईएफ आपको कुछ अतिरिक्त चीजें देता है जो आप अब एल 2 एस की पेशकश के शीर्ष पर कर सकते हैं।
पॉल मेंडोज़ा

40
यह उत्तर अब 5 साल पुराना है और काफी पुराना है। एंटिटी फ्रेमवर्क 6 अब बीटा में है और इसमें बहुत सुधार हुआ है, जिसमें आलसी लोडिंग, एनम सपोर्ट, इत्यादि शामिल हैं,
Tim

109

LINQ to SQL ट्रूली डेड है? InfoQ.com के लिए जोनाथन एलन द्वारा

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

...

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

...

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

...

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


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

12
बहुत से प्रमुख ई-कॉमर्स साइटें LINQ to SQL का उपयोग करती हैं। उदाहरण: Redbox, Stackoverflow, आदि
PositiveGuy

14
मैं एक बहुत अच्छे डेवलपर्स को जानता हूं जो LINQ to SQL का उपयोग करते हैं और कहते हैं कि ये लेख पूरी तरह से ओवरब्लाउन हैं। मैं सहमत हूँ। LINQ to SQL का उपयोग शक्तिशाली .com में किया गया है और अभी भी है।
पॉजिटिव

4
हां, कॉलिंग। L2EF क्वेरी में पूर्णांक संपत्ति पर .TStString () अपवाद नहीं होना चाहिए।
स्टिंगजैक 21

3
@ BlueRaja-DannyPflughoeft क्या यह 5 साल से अधिक समय के बाद भी सही है?
विकास राणा

94

उस लेख में उल्लिखित कई स्पष्ट अंतर हैं, जो पोस्ट किए गए हैं, लेकिन संक्षिप्त उत्तर है:

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

मूल आधार L2S रैपिड डेवलपमेंट के लिए था, और EF अधिक "एंटरप्रिसिए" एन-टियर एप्लिकेशन के लिए है, लेकिन वह L2S को कम बेच रहा है।


13
आपका उद्धरण "L2S केवल SQL सर्वर के साथ काम करेगा (जहाँ तक मुझे पता है) को अपडेट करने की आवश्यकता है: ओपन सोर्स प्रोजेक्ट" dblinq ", SQLQ को SQL असेंबली में बदल देता है, जिसमें MySQL, PostgreSQL, Ingres, Firebird, SQLite से बात की जा सकती है। .. और Microsoft SQL (बेशक)।
कंटैंगो

1
रुको ... तो EF कसकर युग्मित DL ऑब्जेक्ट नहीं बनाता है?
पॉजिटिव

7
हाँ मूल आधार है कि L2S एक उद्यम सक्षम समाधान नहीं है अब सच है। मेरा मतलब है कि StackOverflow L2S पर चलता है और अन्य का एक गुच्छा है। जैसे कि Redbox, और कई और।
पॉजिटिव

74

LINQ to SQL

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

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

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

यह सभी देखें:


6
यह सबसे वर्तमान और विस्तृत उत्तर है।
एरट्रा

2
क्या एंटिटी फ्रेमवर्क SQL को LINQ का उपयोग नहीं करता है , जब आप कहते हैं कि आप लिख रहे हैं dbSet<Orders>.Where()...ToList()? मुझे लगता है कि LINQ से SQL में Entity Framework का विरोध करना भ्रामक है।
डॉन चेडल

4
@mmcrae EF L2S का उपयोग नहीं करता है , दोनों अंतर्निहित डेटाबेस के लिए linq- प्रदाता हैं। यदि आप इसे Linq-to-the-database के रूप में व्याख्या करते हैं, linq-to-Objects और linq-to-xml के समान, तो हाँ, दोनों linq-to-a-database में समान हैं। लेकिन नहीं, EF L2S (या इसके विपरीत) का उपयोग नहीं करता है। दो पूरी तरह से अलग उपकरण।
मार्टन

4
"सभी नई परियोजनाओं के लिए अनुशंसित ... छोटे लोगों को छोड़कर" मैं असहमत हूं। छोटे प्रोजेक्ट के साथ चल रहे ग्राउंड को हिट करने के लिए कोड फर्स्ट एक बेहद त्वरित तरीका है। इसके अलावा, इस सवाल के लिए महान अद्यतन।
DrewJordan

51

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


7
POCO समर्थन का अभाव नंबर एक कारण है जो मैं इकाई फ्रेमवर्क पर SQL के लिए LINQ चुन रहा है। जब वे इसे करने का वादा कर रहे हैं तो मैं ईएफ को अगले संस्करण में शामिल कर सकता हूं। वहाँ कुछ अतिरिक्त परियोजनाएं हैं जो EF के लिए POCO करते हैं, लेकिन सफाई से पर्याप्त नहीं हैं।
जोसेफ फेरिस

27
यदि कोई व्यक्ति (मेरे जैसा) नहीं जानता कि POCO का क्या मतलब है: सादा पुरानी सीएलआर वस्तु
CBONo

4
मैं वास्तव में यह नहीं देखता कि पीओसीओ का समर्थन नहीं करने के बारे में क्या बड़ा उपद्रव है ... यह अमूर्त लोगों का एक और स्तर है। एक कारखाना बनाएँ, डेटा रिपॉजिटरी को इंजेक्ट करें और वहां अपने POCO का निर्माण करें। यह शायद एक अच्छा विचार है।
अट्ठाईस यूनाइट

3
मैंने सुना है कि ECO 4 में पॉस्को संभव है
सकारात्मक 24

8
POCO समर्थन इन दिनों उपलब्ध है और उत्तराधिकार अब इकाई वर्गों के लिए एक आवश्यकता नहीं है @ कॉफ़ी एडिक्ट POCO सिर्फ एक विशिष्ट वस्तु पर कोई निर्भरता के साथ एक साधारण वस्तु है और आधुनिक इकाई ढांचे के पैटर्न का एक प्रमुख हिस्सा है
क्रिस मैकग्राथ

46

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

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

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

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

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

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


36

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

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


1
आपका लापता बिंदु - यहां तक ​​कि छोटे डेटाबेस के साथ, आप डेटाबेस तालिका और कोड / डोमेन ऑब्जेक्ट के बीच 1: 1 संबंध से कुछ अलग चाह सकते हैं। बस पर निर्भर करता है कि आप बस / डोमेन ऑब्जेक्ट में कितना अमूर्त चाहते हैं।
एलकेमिकल

18
मैंने महसूस किया है कि :) आज मुझे अपनी व्यावसायिक संस्थाओं को नियंत्रित करना पसंद है। मैं अभी भी Linq2sql का उपयोग करता हूं, लेकिन केवल अपनी रिपॉजिटरी के अंदर जहां मुझे Linq2sql का उपयोग करके डेटा मिलता है और linq2sql संस्थाओं को अपने कस्टम व्यावसायिक संस्थाओं में परिवर्तित करता है। हो सकता है कि या-मैपर का उपयोग करने की तुलना में थोड़ा अधिक काम हो, लेकिन फिर भी मैं अपने व्यवसाय की परत को किसी भी ओआर-मैपर विशिष्ट कोड से मुक्त रखना पसंद करता हूं।
terjetyl

25

2
जवाब में कुछ बातें सही नहीं हैं। यदि आप पहले कोड का उपयोग करते हैं तो EDMX की आवश्यकता नहीं है। और मुझे समझ में नहीं आता है कि जब आप कोड फर्स्ट का उपयोग कर रहे होते हैं तो डि कैसे खेलते हैं।
मार्टेन

1
इसके अलावा, लाइनक टू एसक्यूएल एक DB को मॉडल वर्गों से बस ठीक कर सकता है। यकीन नहीं होता कि यह डीबी खुद भी उत्पन्न कर सकता है, लेकिन स्कीमा और तालिकाओं का निर्माण लिनक के भीतर SQL की क्षमताओं के लिए होता है।
टॉम लिंट

उत्तर के लिए धन्यवाद, मुझे लगता है कि जब कोई डेटाबेस का उपयोग कर कोड / मैपिंग उत्पन्न करने के लिए sqlmetal.exe docs.microsoft.com/en-us/dotnet/framework/tools/… का उपयोग कर सकता हैLinq to SQL
विनोद श्रीवास्तव

23

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

Microsoft द्वारा प्रदत्त:

  • SQL सर्वर, OBDC और OLE DB के लिए ADO.NET ड्राइवर

तृतीय पक्ष प्रदाता:

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

कुछ नाम है।

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

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


15

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

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


12

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


4
एंटिटी फ्रेमवर्क डेटाबेस के शीर्ष के अमूर्त की एक परत के लिए अनुमति देता है। आज (मेरी राय में) कई OR मैपर के साथ समस्या यह है कि वे टेबल और कक्षाओं के बीच 1 से 1 मैपिंग प्रदान करते हैं। डेटाबेस मॉडल हमेशा उस तरीके को प्रतिबिंबित नहीं करता है जो हम व्यवसाय मॉडल के संदर्भ में सोचते हैं।
सीनो

अंतरिक्ष से बाहर भाग गया। किसी भी तरह, जो मैंने ऊपर कहा, उसके आधार पर, मैं तर्क दूंगा कि आपका उत्तर पूर्ण नहीं है।
सीनियो

7
मुझे लगता है कि यह वास्तव में बुरी सलाह है। L2S आपके डेटाबेस की सादगी या जटिलता की परवाह किए बिना अच्छा है। वास्तविक जाल में चिंताओं का उचित पृथक्करण नहीं है। यदि आप अपनी व्यावसायिक परत और अपनी डेटा एक्सेस लेयर को मर्ज करने की कोशिश करते हैं, और अपनी Linqed वस्तुओं का उपयोग हर चीज के लिए करते हैं, तो आपको L2S सीमित लगेगा। लेकिन यह एक अति सरलीकृत और अखंड डिजाइन के साथ एक समस्या है। L2S एक बेहतरीन DAL बनाता है, और यदि आप अपने व्यवसाय के नियमों से एक अलग चिंता का विषय बना रहे हैं, तो आप लंबे समय में कई क्षेत्रों में अपने आप को बहुत परेशानी से बचाएंगे।
Mattmc3

1
यह मुझे कुछ नहीं बताता है। आपकी शर्तों में क्या सरल है?
पॉजिटिव

1
और "तार्किक / सार" की आवश्यकता के लिए एक उदाहरण के रूप में आपका क्या मतलब है। हां मुझे पता है कि अमूर्तता क्या है, लेकिन आपके संदर्भ में एक उदाहरण है ... कृपया मुझे समझाने के लिए कि आप क्या कह रहे हैं ... इसका वर्णन करें, बस मुझे सामान्य स्लैंग न दें ... यह कहने वाले के सभी रिश्तेदार हैं उन शब्दों से तो मुझे कोई मतलब नहीं है कि आप इससे क्या मतलब रखते हैं।
पॉजिटिव जी

8

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

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


3
SQL Server 2008 स्थानिक डेटाटिप्स (ओपन जियोस्पेशियल कंसोर्टियम ओजीएस) ने एंटिटी फ्रेमवर्क के रूप में समर्थित है। अन्य प्रदाताओं (ओरेकल के लिए डेवार्ट) ने भी समर्थन किया। Msdn.microsoft.com/en-us/data/dn194325 देखें ।
उप-

6

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

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


4
"बीच में कोई अजीब बात नहीं है", ठीक है आप इससे क्या मतलब रखते हैं। एक "बीच में अजीब बात" का उदाहरण
PositiveGuy

इस उत्तर को संपादित करना या हटाना अच्छा होगा, यह आधुनिक विकास के लिए उपयोगी नहीं है और लोगों को गलत रास्ते पर ला सकता है।
Giulio Caccin

6

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

अब EF विकसित हो गया है और Linq-to-SQL में async समर्थन की कमी है, जो अत्यधिक स्केलेबल सेवाओं के लिए बहुत अच्छा है। हमारे पास कभी-कभी प्रति सेकंड 100+ अनुरोध होते हैं और हमने अपने डेटाबेस को अनुकूलित करने के बावजूद, अधिकांश प्रश्नों को पूरा करने के लिए कई मिलीसेकंड लेते हैं। सिंक्रोनस डेटाबेस कॉल के कारण, थ्रेड ब्लॉक किया गया है और अन्य अनुरोधों के लिए उपलब्ध नहीं है।

हम पूरी तरह से इस सुविधा के लिए, एंटिटी फ्रेमवर्क पर स्विच करने के बारे में सोच रहे हैं। यह शर्म की बात है कि Microsoft ने Linq-to-SQL में async सपोर्ट को लागू नहीं किया (या इसे ओपन-सोर्स किया गया, ताकि समुदाय ऐसा कर सके)।

परिशिष्ट दिसंबर 2018: Microsoft .NET कोर की ओर बढ़ रहा है और Linq-2-SQL .NET Core पर समर्थन नहीं करता है, इसलिए आपको यह सुनिश्चित करने के लिए EF में जाने की आवश्यकता है कि आप भविष्य में EF.Core पर माइग्रेट कर सकते हैं।

विचार करने के लिए कुछ अन्य विकल्प भी हैं, जैसे कि LLBLGen । यह एक परिपक्व ओआरएम समाधान है जो पहले से ही एक लंबे समय से मौजूद है और अधिक भविष्य के सबूत साबित हुआ है, फिर एमएस डेटा समाधान (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core)।


2

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

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

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.