11

मैंने अभी लिंक के साथ लाइनों के साथ खेलना शुरू कर दिया और एक ऐसे मुद्दे में भाग गया जो मैं समझ नहीं पा रहा हूं। सार इकाई RelatedResource कि RelatedResource (पुस्तक, लिंक, गाइड, आदि) प्रकार परिभाषित करता है में एक TypeID क्षेत्र हैविरासत, हालत और विदेशी कुंजी के साथ इकाई ढांचा

Condition member 'RelatedResources.TypeID' with a condition other than 'IsNull=False' is mapped. Either remove the condition on RelatedResources.TypeID or remove it from the mapping.

शर्त यह है कि मौजूद है:

मैं इस त्रुटि हो रही है। TypeID भी एक विदेशी कुंजी है और संसाधन प्रकार इकाई के साथ सहयोग में मैप किया गया है। मुझे लगता है कि यह समस्या है लेकिन मुझे नहीं पता कि मुझे यह कैसे बदलना चाहिए या क्यों।

+0

क्यों TypeID एक विदेशी कुंजी है? – NotDan

+0

डीबी में संसाधन प्रकार और संबंधित स्रोतों के बीच संबंधों के लिए। – Mike

+0

मैं इस पर एक बाउंटी शुरू कर रहा हूं क्योंकि इस प्रश्न के उत्तर के रूप में चिह्नित प्रतिक्रिया का उत्तर पूरा नहीं हुआ है और क्योंकि पूरे इंटरनेट पर इस समस्या के उदाहरण हैं। असल में इसे आधार इकाई में विदेशी कुंजी का उपयोग इस आधार से प्राप्त होने वाली संस्थाओं के बीच एक विभेदक के रूप में करना है। – mare

उत्तर

9

आमतौर पर तब होता है जब आपके पास टाइपिड एक शर्त के रूप में होता है और इसे एक संपत्ति के रूप में भी उपयोग करता है। यह समस्याएं पैदा कर सकता है क्योंकि आप इसका उपयोग रिसोर्स टाइप के साथ एसोसिएशन को मैप करने और विरासत के लिए एक शर्त के रूप में उपयोग करने के लिए कर रहे हैं। आधार वर्ग संपत्ति पर उपयोग [NotMapped]

https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application

:

+0

जो मैं सोच रहा हूं वह है लेकिन मुझे इसके चारों ओर एक रास्ता नहीं पता है। – Mike

+0

क्या आप संबंधित संसाधन के प्रकार को निर्धारित करने के लिए संसाधन प्रकार इकाई/तालिका का उपयोग करने का प्रयास कर रहे हैं? अर्थात। अगर ResourceType.Name == "पुस्तक" तो संबंधित संसाधन का वास्तविक प्रकार पुस्तक है? यदि ऐसा है, तो आपके मिश्रण विरासत को रोकथाम (दुर्भाग्य से कौन सा इकाई ढांचा पसंद नहीं है)। ओओपी बिंदु से, नाम/चिह्न गुण वास्तव में विरासत कक्षाओं में होना चाहिए (यानी पुस्तक को अपना नाम और आइकन परिभाषित करना चाहिए, एक और प्रकार नहीं) – NotDan

+0

बिल्कुल ... अच्छा बिंदु। मैं इसके साथ थोड़ा सा खेलूँगा। धन्यवाद। – Mike

0

RelatedResources.TypeID डेटाबेस में और इकाईफ्रेमवर्क स्कीमा में शून्य (यानी 'Isnull = false') नहीं है?

सुनिश्चित नहीं है कि आप दोनों को एक सशर्त के रूप में क्षेत्र मिल सकता है और किसी अन्य तालिका में विदेशी कुंजी के रूप में कार्य करता है।

और क्या आपको इस प्रकार का निर्धारण करने के लिए सशर्त विरासत का उपयोग करने की आवश्यकता होगी?

+0

हाँ I टाइपआईडी के लिए कभी शून्य मूल्य नहीं होना चाहिए। – Mike

0

तालिका-प्रति-पदानुक्रम (TPH) विरासत त्रुटि की तरह लगता है।

छद्म कोड:

public abstract class MyBaseClass 
{ 
    [NotMapped] 
    public MyEnum MyEnum { get; protected set; } 
} 


public class DerivedOne: MyBaseClass 
{ 
    public DerivedOne() 
    { 
     MyEnum = MyEnum.Value1; 
    } 

    public string MyDerivedOneString { get; set; } 
} 

public class DerivedTwo: MyBaseClass 
{ 
    public DerivedTwo() 
    { 
     MyEnum = MyEnum.Value2; 
    } 
} 

public class MyDbContext : DbContext 
{ 
    DbSet<MyBaseClass> MyBaseClass { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<MyBaseClass>() 
      .Map<DerivedOne>(x => x.Requires("MyEnum").HasValue((int)MyEnum.Value1)) 
      .Map<DerivedTwo>(x => x.Requires("MyEnum").HasValue((int)MyEnum.Value2)); 
    } 
} 
संबंधित मुद्दे