5

मेरे पास एक सार श्रेणी है, और इसके सबक्लास, और मैं इसे NHibernate का उपयोग करके अपने डेटाबेस में मैप करना चाहता हूं। मैं फ्लुएंट का उपयोग कर रहा हूं, और मैपिंग कैसे करें read on the wiki। लेकिन जब मैं subclass के मैपिंग को एनएचबीर्नेटेट जोड़ता हूं। मैपिंग होने पर डुप्लिकेट मैपिंग अपवाद फेंक दिया जाता है। क्यूं कर?अमूर्त वर्ग और उप-वर्ग मैपिंग करते समय NHibernate डुप्लिकेट मैपिंग अपवाद

public abstract class FieldValue 
{ 
    public int Id { get; set; } 
    public abstract object Value { get; set; } 
} 

public class StringFieldValue : FieldValue 
{   
    public string ValueAsString { get; set; } 
    public override object Value 
    { 
     get 
     { 
      return ValueAsString; 
     } 
     set 
     { 
      ValueAsString = (string)value; 
     } 
    } 
} 

और मैपिंग:

public class FieldValueMapping : ClassMap<FieldValue> 
{ 
    public FieldValueMapping() 
    { 
     Id(m => m.Id).GeneratedBy.HiLo("1"); 
     // DiscriminateSubClassesOnColumn("type"); 
    } 
} 

public class StringValueMapping : SubclassMap<StringFieldValue> 
{ 
    public StringValueMapping() 
    { 
     Map(m => m.ValueAsString).Length(100); 
    } 
} 

और अपवाद:

NHibernate.MappingException:

यहाँ मेरी (सरलीकृत) वर्ग हैं मानचित्रण दस्तावेज़ संकलन नहीं किया जा सका : (XmlDocument) ----> NHibernate.DuplicateMappingException: डुप्लिकेट क्लास/इकाई मैपिंग ना mespacePath.StringFieldValue

कोई विचार?

उत्तर

7

समस्या का पता चला। यह पता चला कि मैं एक ही विधानसभा में कई बार संदर्भ में किया था में PersistenceModel डेटाबेस कॉन्फ़िगर करने के लिए इस्तेमाल किया:

public class MappingsPersistenceModel : PersistenceModel 
{ 
    public MappingsPersistenceModel() 
    { 
     AddMappingsFromAssembly(typeof(FooMapping).Assembly); 
     AddMappingsFromAssembly(typeof(BarMapping).Assembly); 
     // Where FooMapping and BarMapping is in the same Assembly. 
    } 
} 

जाहिर है इस ClassMap-मैपिंग के लिए एक समस्या नहीं है। लेकिन SubclassMap के लिए यह इसे संभाल नहीं करता है, जिससे डुप्लिकेट मैपिंग - और इसलिए डुप्लिकेट मैपिंग अपवाद। PersistenceModel में डुप्लीकेट को हटाने से समस्या ठीक हो जाती है।

2

यदि आप स्पष्ट मैपिंग के साथ ऑटोमैपिंग का उपयोग कर रहे हैं तो धाराप्रवाह एक ही कक्षा के लिए दो मैपिंग उत्पन्न कर सकता है।

+0

हाँ - मैं केवल स्पष्ट मैपिंग का उपयोग कर रहा हूं, लेकिन विचार मेरे दिमाग को पार कर गया .. मुझे यह देखने के लिए एक नज़र रखना होगा कि किसी कारण से यह उप-वर्ग को स्वचालित रूप से मैप किया गया है या नहीं। क्या ऐसा? – stiank81

+0

यह पहली बार है जब मैं सबक्लास मैप का उपयोग करता हूं। क्लासमैप स्वचालित नहीं हैं, लेकिन क्या यह हो सकता है कि SubclassMaps हैं? मेरे पास फ्लुएंट के साथ इतना अनुभव नहीं है .. – stiank81

+0

http://stackoverflow.com/questions/1538248/fluent-nhibernate-mapping-a-class-with-subclass-problem/1538419#1538419 आप यहां देख सकते हैं उदाहरण के लिए – Sly

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