लैम्ब्डा एक्सप्रेशंस के साथ इन्टीटी फ्रेमवर्क 4 में शामिल का उपयोग करना


88

मैंने इस मामले को दूर करने के लिए कई लेख देखे हैं, जो सभी CTP4 से संबंधित हैं, या अपने स्वयं के विस्तार के तरीकों को जोड़ रहे हैं।

क्या एक "आधिकारिक" EF4 शामिल है, जिसमें लैम्बडा एक्सप्रेशंस का उपयोग शामिल है (पहले स्तर के संबंधों के लिए भी और दूसरे और अधिक स्तर के लिए) या क्या यह अंततः RTM में शामिल नहीं था?

यह एक है - मुझे यह जानकर खुशी होगी कि इसे कैसे करना है, जैसा कि मेरे कोड में लैम्ब्डा एक्सप्रेशन का उपयोग करते हुए अब (# system.data.entity # system.data.linq के साथ) अभी भी मुझे देता है:

लैंबडा एक्सप्रेशन को 'स्ट्रिंग' टाइप करने के लिए नहीं बदल सकते क्योंकि यह एक प्रतिनिधि प्रकार नहीं है:

var customers = from c in
context.Customers.Include(c=>c.Phone)

1
नहीं, यह मौजूद नहीं है (CTP4 के अलावा - जैसा कि आप कहते हैं)। मैं टाइप सेफ्टी हासिल करने के लिए एक्सटेंशन मेथड्स / एनम का इस्तेमाल करता हूं।
RPM1984

मैंने वह भी किया, इसलिए एमएस ने इसे CTP4 में शामिल किया और इसे RTM में हटा दिया?
दानी

जवाबों:


229

फ़ंक्शन के माध्यम से लैम्ब्डा के साथ उत्सुक लोडिंग के लिए, एंटिटी फ्रेमवर्क 4.1 के आरटीएम संस्करण में वास्तव में फ़ाइल में विस्तार विधियां शामिल हैं । बस अपने प्रोजेक्ट में DLL को शामिल करें और आपको कोड लिखने में सक्षम होना चाहिए:EntityFramework.dllInclude

var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList();

System.Data.Entity नाम स्थान को शामिल करने के लिए एक आयात / उपयोग कथन जोड़ना याद रखें । अन्यथा संकलक विस्तार विधियों को नहीं पा सकता है। उदाहरण के लिए:

using System.Data.Entity;

अधिक जानकारी के लिए यह ADO.NET टीम ब्लॉग लेख देखें।


1
हालांकि ADO.net ब्लॉग का लिंक अभी भी प्रासंगिक है, उसी विषय के लिए EF6 संदर्भ / मार्गदर्शिका है: लोडिंग संबंधित एंटिटीज़ मुझे लगता है कि प्रलेखन को ब्लॉग और पोस्ट के बजाय राजकुमारी और गेंडा उदाहरणों पर स्विच करने की आवश्यकता है और वे उपयोग कर रहे हैं हर जगह।
अर्काइनेन55

1
धन्यवाद, मैं सिर्फ System.Data.Entity का उपयोग कर जोड़; यह मेरा काम है
अदनान

टीम ब्लॉग लिंक मर चुका है, यह नया स्थान है
Nintynuts

89

यद्यपि यह प्रश्न में निहित है, किसी और के लिए, जिनके पास एक ही समस्या है जहां वे lambdas का उपयोग नहीं कर सकते हैं। इसके अलावा, सुनिश्चित करें कि आपके पास यह है:

using System.Data.Entity;

5

नहीं, फिलहाल RTM में लैम्ब्डा एक्सप्रेशन के साथ शामिल करने के लिए कोई आधिकारिक समर्थन नहीं है। मैं यह प्रयोग कर रहा हूं ।

जब हम CTP4 के बारे में बात कर रहे हैं तो हम अर्थ एंटिटी फ्रेमवर्क फ़ीचर हैं। यह EF4 की तुलना में नया API है। इसमें मुख्य रूप से कोड फर्स्ट और कुछ अन्य सुधार शामिल हैं।


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

एंटिटी फ्रेमवर्क फ़ीचर अभी CTP5 में है। मुझे लगता है कि RTM संस्करण को 2011 के पहले चतुर्भुज में वर्गीकृत किया जाना चाहिए। इसलिए उम्मीद है कि इसमें लैंबडा अभिव्यक्ति शामिल होगी, लेकिन मैंने इसके कार्यान्वयन की जांच नहीं की है, इसलिए मैं यह नहीं कह सकता कि यह किसी भी तरह के कैशिंग का उपयोग करता है।
लादिस्लाव मृंका

31
यह उत्तर ईएफ 4.3.x के रूप में गलत है। अन्य उत्तर सही हैं, किसी को लैमडा एक्सप्रेशंस के साथ ओवरलोड प्राप्त करने के लिए System.Data.Entity का उपयोग करना चाहिए ।
एरिक जे

1
@ एरिक जे: हाँ। EF 4.1 के बाद से शामिल जोरदार टाइप उपलब्ध है।
लादिस्लाव मृका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.