2011-03-21 11 views
7

क्या क्लास प्रॉपर्टी के बजाय क्लास फील्ड में टेबल कॉलम को मैप करना संभव है और कैसे?इकाई फ्रेमवर्क कोड पहला: निजी फ़ील्ड को कैसे मैप करें?

आप यह कर सकते :)

इस लिंक का पालन करें: http://weblogs.asp.net/ricardoperes/archive/2013/08/22/mapping-non-public-members-with-entity-framework-code-first.aspx

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

 public static class ExpressionHelper 
     { 
      public static Expression<Func<TEntity, TResult>> GetMember<TEntity, TResult>(String memberName) 
      { 
       ParameterExpression parameter = Expression.Parameter(typeof(TEntity), "p"); 
       MemberExpression member = Expression.MakeMemberAccess(parameter, typeof(TEntity).GetMember(memberName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single()); 
       Expression<Func<TEntity, TResult>> expression = Expression.Lambda<Func<TEntity, TResult>>(member, parameter); 
       return (expression); 
      } 
    } 

फिर, हम यह DbContext.OnModelCreating विधि पर कॉल StructuralTypeConfiguration.Property को पैरामीटर के रूप:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Project>().Property(ExpressionHelper.GetMember<Project, Decimal>("Budget")).IsRequired(); 

     base.OnModelCreating(modelBuilder); 
    } 

उत्तर

4

इकाई फ्रेमवर्क (कोड पहले या नहीं) किसी क्षेत्र में मैपिंग का समर्थन नहीं करता है; केवल गुणों के लिए।

अद्यतन के रूप में टिप्पणी में कहा, इन दस्तावेजों को थोड़ा दिनांकित, लेकिन अभी भी साथ किसी भी शुरुआत में मदद कर सकते हैं:

Entity Framework Code first development Resources and Documentation

पूर्णता के लिए, यहाँ एक ईएफ 4.1 आरसी में शामिल किए गए लिंक से लिंक: EF 4.1 Release Candidate Available

सीटीपी 5 (उपरोक्त लिंक से) के बाद से परिवर्तन:

  • नाम बदलें 'DbDatabase' की 'डाटाबेस' के लिए। इस वर्ग ने को 'System.Data.Entity' नामस्थान में डेटाबेस प्रारंभकर्ता वर्गों के साथ स्थानांतरित कर दिया है।

  • नाम बदलें की 'ModelBuilder' 'DbModelBuilder', अन्य मुख्य वर्गों के साथ संरेखित करने के लिए करने के लिए

  • मॉडल प्रथम और डेटाबेस पहले में सत्यापन। नया सत्यापन सुविधा केवल कोड में सीटीपी 5 में समर्थित थी। आरसी में सत्यापन सुविधा सभी तीन विकास कार्यप्रवाहों (मॉडल प्रथम, डेटाबेस पहले, और कोड पहले) के साथ काम करेगी।

  • पूर्ण इंटेलिजेंस दस्तावेज़। फ़ीचर सीटीपी बड़े पैमाने पर दस्तावेज नहीं किए गए थे क्योंकि प्रत्येक रिलीज के बीच एपीआई सतह बदल रही थी। इस रिलीज में पूर्ण दस्तावेज़ शामिल हैं।

  • कोड पहले प्लग करने योग्य सम्मेलनों को हटाने का कोड। प्लग करने योग्य सम्मेलन फ़ीचर सीटीपी 5 में पूर्वावलोकन किया गया था लेकिन इस रिलीज के लिए लाइव-लाइव गुणवत्ता पर नहीं थे।यह रिलीज अभी भी डिफ़ॉल्ट सम्मेलनों को हटाने का समर्थन करता है।

  • कोड प्रथम संबंध API में IsIndependent का समेकन। जब फ़ीचर सीटीपी 5 में रिश्तों को कॉन्फ़िगर करना IsIndependent विधि का उपयोग यह पहचानने के लिए किया गया था कि के संबंध में कोई विदेशी कुंजी प्रॉपर्टी ऑब्जेक्ट मॉडल में उजागर नहीं है। यह नक्शा विधि को कॉल करके अब किया गया है। HasForeignKey अभी भी संबंधों के लिए उपयोग किया जाता है जहां विदेशी कुंजी संपत्ति मॉडल में प्रकट होती है।

+0

+1 मैं सहमत हूं। मैं एक लिंक खोज रहा हूं जो पोस्ट करने से पहले इसे समझाता है, लेकिन मुझे यह नहीं मिला। वैसे भी, मुझे पूरा यकीन है कि ईएफ कैसे काम करता है। – Jonathan

+0

मैंने पहले से ही इन सभी दस्तावेजों को पढ़ लिया है। बीटीडब्ल्यू, वे बूढ़े हैं। नए आरसी ने भी बदलाव तोड़ दिया है। यही कारण है कि मैं पूछता हूं। ef ef es – mynkow

+0

यह सच है कि ब्रेकिंग में परिवर्तन हुए हैं, लेकिन खेतों में मैपिंग के लिए समर्थन AFAIK एजेंडा में नहीं था। और दिनांकित दस्तावेजों के लिए खेद है, आपके ईएफ ज्ञान के स्तर को नहीं पता था और सोचा कि वे वैसे भी उपयोगी हो सकते हैं। –

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