2012-01-18 19 views
5

मैं एक मॉडल के रूप में निम्नानुसार है:इकाई की रूपरेखा कोड पहले - ध्यान न दें बेस कक्षा

public class User : System.Web.Security.MembershipUser 
{ 
public int UserId { get; set; } 
    public string SomeProperty { get; set; } 
} 

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

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Ignore<System.Web.Security.MembershipUser>(); 
} 
+0

इस प्रकार क्या modelBuilder.Ignore साथ कुछ गड़बड़ है नक्शा ()? यह काम नहीं किया? – vk5880

उत्तर

2

NotMappedAttribute विशेषता अपने दोस्त है:

[MetadataType(typeof(UserMd)] 
public class User : System.Web.Security.MembershipUser 
{ 
    ////read description bellow code 
    //static User() 
    //{ 
    // var type = typeof(User); 
    // TypeDescriptor.AddProviderTransparent(
    // new AssociatedMetadataTypeTypeDescriptionProvider(type), type); 
    //}   

    public int UserId { get; set; } 
    public string SomeProperty { get; set; } 

    internal class UserMd 
    { 
     [NotMapped] 
     public string UserName { get; set; } 
    } 
} 

मुझे यकीन है कि अगर कोड पहले से ही स्वचालित रूप से मेटाडाटा को संसाधित करता है, इसके बाद के संस्करण की कोशिश नहीं कर रहा हूँ और अगर यह काम नहीं करता है, मेटाडाटा संलग्न मैन्युअल रूप से (यानी टिप्पणी लाइनों को असम्बद्ध)।

अद्यतन मैं ऊपर समाधान बेहतर पसंद करते हैं, लेकिन अगर यह तुम्हारे लिए भी अत्यधिक शब्द है, StructuralTypeConfiguration<TStructuralType>.Ignore<TProperty> Method विधि का उपयोग करें:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    var config = modelBuilder.Entity<User>(); 
    config.Ignore(u => u.UserName); 
} 
+0

@MystereMan क्षमा करें, उत्तर अपडेट किया गया। – Shimmy

+0

जब स्थिर कन्स्ट्रक्टर के साथ प्रयोग किया जाता है तो यह काम करता है। हालांकि बहुत बदसूरत। यदि कोई मौजूद है तो मुझे एक और अधिक सुरुचिपूर्ण समाधान देखना अच्छा लगेगा। – Mark

+0

ठीक है। मैंने अपना जवाब संपादित कर लिया है। – Shimmy

8

आप के लिए दो विकल्प हैं। एक प्रत्येक प्रॉपर्टी के लिए Ignore फोन करके सभी आधार वर्ग गुण अनदेखी करने के लिए है।

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<User>().Ignore(u => u.ProviderUserKey); 
    modelBuilder.Entity<User>().Ignore(u => u.LastActivityDate); 
    // and so on for all base class properties 
} 

अन्य विकल्प आपके User वर्ग से एक MembershipUser उदाहरण पुनः प्राप्त करने के रचना का उपयोग करने के लिए होगा। यहाँ User वर्ग MembershipUser से विरासत में मिला नहीं है।

public class User 
{ 
    public int UserId { get; set; } 
    public string SomeProperty { get; set; } 

    public MembershipUser MembershipUser 
    { 
     get 
     { 
      // create an instance using the available properties and return 
     } 
    } 
} 

और जैसा कि

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<User>().Ignore(u => u.MembershipUser); 
    modelBuilder.Ignore<System.Web.Security.MembershipUser>(); 

} 
+0

मैं अक्सर विरासत से अधिक रचना पसंद करते हैं करने के लिए टिप के साथ सहमत हैं। – Suamere

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