LINQ

2009-04-30 10 views
6

पर स्विचिंग मैं समय सीखने और LINQ से SQL का उपयोग करने पर विचार कर रहा हूं लेकिन एसक्यूएल को एम्बेड न करने की सलाह देने वाले सर्वोत्तम प्रथाओं के वर्षों में मुझे प्रतिमानों को बदलने में कठिनाई हो रही है।LINQ

संकलित कोड में क्वेरी एम्बेड करने के लिए अब यह क्यों स्वीकार्य लगता है? ऐसा लगता है कि कुछ तरीकों से मेरे पीछे लगभग एक कदम पीछे है।

क्या किसी को LINQ पर स्विच करने के बाद ठीक क्वेरी/संकलन/तैनाती चक्र के साथ कोई समस्या है?

मुझे लगता है कि मैं अभी भी समाप्त इकाई फ्रेमवर्क की प्रतीक्षा कर सकता हूं।

आपको क्या लगता है?

+4

+1 आपके संकलित कोड में एम्बेडिंग एसक्यूएल को इंगित करने के लिए +1 वास्तव में एक बुरा अभ्यास है! मैं तुम्हारे साथ हूँ, आदमी! –

उत्तर

8

लिंक से एसक्यूएल का लाभ यह है कि यह वास्तव में संकलित कोड में प्रश्नों को एम्बेड नहीं करता है - वास्तव में नहीं। लिंक कथन का अर्थ है कि आपके .NET कोड में वास्तव में एसक्यूएल स्टेटमेंट बनाने के लिए आवश्यक तर्क है, कच्चे वर्ग नहीं।

यह वास्तव में बहुत से समझ में आता है। नेट कोड जो सीधे दस्तावेज के साथ स्पॉक्स की एक लंबी सूची के बजाय निष्पादित करने के लिए एसक्यूएल में परिवर्तित हो जाता है। Linq रास्ता बनाए रखने और सुधार करने के लिए बहुत आसान है।

मुझे नहीं लगता कि मैं एक मौजूदा प्रोजेक्ट को लिंक में बदल दूंगा - वास्तव में यह संपूर्ण डेटा-लेयर के लिए एक प्रतिस्थापन है और यह उस परत तक पहुंचने के तरीके को बदल सकता है। जब तक आप एक बहुत ही समान मॉडल से स्विच नहीं कर रहे हैं, तब तक किसी भी संभावित लाभ के लिए लागत बहुत अधिक होने वाली है।

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

+1

सहमत हैं, सिवाय इसके कि LINQ से इकाइयां अब शुरू करने के लिए एक बेहतर जगह हो सकती हैं (लेकिन सभी वही टिप्पणियां फिर से एम्बेडिंग क्वेरी लागू होती हैं)। – Richard

+0

मैं ईएफ पर एक बड़ी परियोजना विकसित कर रहा हूं क्योंकि यह बीटा था (अब 6 महीने) मुझे खेद है। ईएफ उत्पादन तैयार नहीं है। Linq2SQL है। ईएफ के रूप में यह अब आधा बैक डेटा एक्सेस टेक्नोलॉजी, बहुत सारे अंतराल, अक्षम प्रश्न, अपूर्ण लिंक कार्यान्वयन, डाटाबेसिंग कमियों, और गरीब objec और servicind मॉडल है। अपने आप को दर्द बचाएं और Linq2SQL का उपयोग करें जो एक महान तकनीक है। अच्छी तरह से देखें कि ईएफ vNext कितना अच्छा है, लेकिन तब तक मेरा पुनर्मूल्यांकन इसके बारे में स्पष्ट रहना है, यह बहुत अधिक परेशानी है। –

2

आपको LINQ से SQL को सीधे एसक्यूएल लिखने के ऊपर एक अमूर्तता के रूप में सोचने की आवश्यकता है। यदि आप इसके चारों ओर अपना सिर प्राप्त कर सकते हैं तो आपने सही दिशा में एक कदम उठाया है। आपको कुछ लंबे समय तक विश्वासों को छोड़ने की भी आवश्यकता है जैसे संकलित स्पॉक्स हमेशा तेज़ होते हैं और SQL खातों में डेटा रीडर/लेखक विशेषाधिकार नहीं होना चाहिए।

मुझे पता चला है कि धीरे-धीरे मौजूदा समाधानों को LINQ से SQL तक ले जाना संभव है, जब तक कि एक स्पष्ट डीएएल जगह हो और आप अनुबंध को प्रभावित किए बिना अनुबंध को प्रभावित किए बिना कार्यान्वयन को बदल रहे हों। संदर्भ सूचियां एक आसान उम्मीदवार हैं क्योंकि वे कम प्रभाव डालते हैं, केवल डेटा के सेट पढ़ते हैं। रीट्रोफिटिंग के बारे में जागरूक रहने के लिए आपको जिस चीज की आवश्यकता है, वह संभावित अस्पष्ट वर्ग नाम है यदि आप पहले ही डेटाबेस को मॉडल करने के लिए कोड कर चुके हैं।

LINQ से SQL को एक बड़े उद्यम (सीटीपी दिनों के बाद) में लाने में हिंडसाइट के मूल्य के साथ, मैं इसे फिर से दिल की धड़कन में करूँगा। यह सही नहीं है और ऐसे मुद्दे हैं लेकिन विकास की गति और रखरखाव की बात आती है तो बहुत सारे फायदे हैं। यह एक नया प्रतिमान है और निश्चित रूप से निश्चित रूप से एक कदम आगे है।

3

मैं अपनी बात undertand, यह वास्तव में एक पिछड़े कदम का एक सा की तरह प्रतीत होता है ...

असल में मैं शायद एसक्यूएल करने के लिए LINQ से दूर चलाने और संस्थाओं के लिए LINQ में और अधिक देखने के लिए, अपने संस्थाओं अपने वैचारिक मॉडल हैं डेटा मॉडल और मैं व्यक्तिगत रूप से अधिक आरामदायक एम्बेडिंग प्रश्नों को अपने कोड में एक वैचारिक मॉडल दोबारा महसूस करता हूं। वास्तविक भौतिक मॉडल को एक इकाई ढांचे द्वारा आप से दूर किया गया है।

यह लिंक (यमक बहाना) संस्थाओं और इकाई की रूपरेखा के लिए LINQ की चर्चा: http://msdn.microsoft.com/en-us/library/bb386992.aspx

यह एक दिलचस्प लेख पक्ष-विपक्ष दोनों तरीकों में से discussign है: http://dotnetaddict.dotnetdevelopersjournal.com/adoef_vs_linqsql.htm

संपादित एक और सोचा, यदि आप ईएफ के लिए इंतजार नहीं करना चाहते हैं, तो एनएचबीरनेट पर एक नज़र डालें, आप LINQ को भी देख सकते हैं ... http://www.hookedonlinq.com/LINQToNHibernate.ashx

+1

सिद्धांत रूप में, हां। लेकिन व्यावहारिक रूप से मैं एंटिटी फ्रेमवर्क/लिंक-टू-एंटिटीज के आधार पर किसी भी उत्पादन कोड को विकसित करने में वास्तव में संकोच करता हूं। लिंक-टू-एसक्यूएल उत्पादन तैयार है, ईएफ नहीं है। यद्यपि जैसा कि आप कहते हैं कि एक अतिरिक्त अमूर्त परत जोड़ती है, यह अबाधता दूसरी तरफ (डीबी-साइड) बाहर आने वाले अक्षम SQL क्वेरी की लागत पर आती है। ईएफ vNext - शायद, लेकिन जूरी अभी भी उस पर बाहर है। हमें यह देखना होगा कि इसे रिलीज़ होने पर क्या लाया जाता है लेकिन अब ईएफ के लिए जा रहा है (सफलता या विफलता अभी भी एक बड़ा अज्ञात है) ऐसा कुछ नहीं है जिसे मैं अनुशंसा करता हूं। बस मेरे 2 सेंट ... :) – KristoferA

+1

पूरी तरह से सहमत हैं ... लेकिन कोई समाधान सही नहीं है, इस पर मैं ईएफ की प्रतीक्षा करूंगा। हालांकि, एक बात मेरे लिए स्पष्ट है, LINQ शक्तिशाली और उपयोगी और इसके अपने अधिकार में सीखने योग्य है :-) –

+0

ईएफ 1.0 सीमित है लेकिन यह काम करता है और उत्पादन वातावरण में प्रयोग योग्य है। सब कुछ की तरह यह सीखने में थोड़ा सा लगता है और सीमाओं को दूर करने के लिए कुछ हैक आवश्यक हैं (ढांचे और आईडीई दोनों की विशेषताएं)। हालांकि, कुछ तरीकों से सीमित होने पर यह काफी ठोस है और एक ऐप लेने और जाने का एक तेज़ तरीका है .. और सीखने के बाद सीखने के बाद संस्करण 2 के लिए साफ हो जाएगा ... मेरा मतलब है 4 (?) । – misteraidan

0

SQL सर्वर डेटाबेस के लिए केवल LINQ से SQL का कार्यान्वयन नहीं है, इसलिए गैर- एसक्यूएल सर्वर डेवेल ओपर्स इस कुशल ओआरएम का उपयोग करने का भी लाभ उठा सकते हैं। हमने क्वेरी-स्तर LaodWith() के लिए पहले से ही समर्थन जोड़ा है और त्रुटि प्रसंस्करण को बढ़ाया है। इसके अलावा हम सभी तीन विरासत मॉडल (टीपीएच, टीपीटी, टीपीसी) और प्रमुख क्षेत्र निर्माण का समर्थन करने की योजना बना रहे हैं। आप समर्थित डेटाबेस की सूची पा सकते हैं here

+0

एएनडी यह हमारे लिए सही है? –

0

मुझे आपके कोड में एक संग्रहीत प्रो नाम एम्बेड करने से कहीं अधिक आपके कोड में एसक्यूएल एम्बेड करने के बारे में नहीं लगता है। आपकी प्रक्रिया में बदलाव से अधिक बार आपके कोड में बदलना शामिल है। उदाहरण के लिए, आपको आमतौर पर एक नया कॉलम संदर्भित करने के लिए एक नया इन/आउट पैरामीटर जोड़ने या गेटर/सेटर विधि को अपडेट करने की आवश्यकता होती है।

यह क्या करता है यह आपके डीबी में प्रोसेस और कॉलम के साथ आपके कोड में गुणों और विधियों को संरेखित करने के लिए दो गुना कोड लिखने के कई पैर काम को हटा देता है।

संबंधित मुद्दे