9

नहीं है यहाँ डोमेन मॉडल वर्ग हैं:NHibernate मानचित्रण सार है और discriminator एक स्ट्रिंग

public abstract class BaseClass 
{ 
... 
} 

public class ChildClass : BaseClass 
{ 
... 
} 

ध्यान दें कि माता पिता वर्ग सार है और यह है कि क्या मुझे कुछ कठिनाइयों देता है जब धाराप्रवाह निबर्ननेट के साथ मानचित्र करने का समय आता है। मेरा भेदभाव एक बाइट है (डीबी में tinyint)।

DiscriminateSubClassesOnColumn<byte>("Type") 
    .SubClass<ChildClass>() 
    .IsIdentifiedBy((byte)OperationType.Plan) 
    .MapSubClassColumns(p => { ... }) 

त्रुटि संदेश मिल रहा है: (BaseClass के लिए मानचित्रण वर्ग से लिया गया) क्योंकि यह एक स्ट्रिंग नहीं है और मैं, आधार वर्ग पर एक discriminator मान सेट करने का प्रबंधन नहीं यह काम नहीं करता कर सकते हैं:

कक्षा प्रारंभिक विधि UnitTest1.MyClass प्रारंभ अपवाद को प्रारंभ करें। NHibernate.MappingException: NHibernate.MappingException: इकाई बेसक्लस ---> System.FormatException की SQL स्ट्रिंग में भेदभावकर्ता मान को प्रारूपित नहीं कर सका: इनपुट स्ट्रिंग सही प्रारूप में नहीं थी ..

निम्न पोस्ट यह समझाता है कि क्या होता है। वे एक्सएमएल के साथ समाधान देते हैं लेकिन धाराप्रवाह निबर्ननेट के साथ नहीं: http://forum.hibernate.org/viewtopic.php?t=974225

सहायता के लिए धन्यवाद।

SetAttribute("discriminator-value", "-1"); 

यह FNH एक स्ट्रिंग का उपयोग नहीं करने का निर्देश देने की (मैं इसे लगता है कि लगता है:

+0

एक्सएमएल के साथ समाधान को जोड़ने के लिए धन्यवाद - बिल्कुल मुझे क्या चाहिए! –

उत्तर

12

मैं एक वैकल्पिक हल मिल गया है, लेकिन यह एक पैच की तरह तो लगता है ... मैं मैपिंग फ़ाइल के लिए निम्न जोड़ा सार आधार वर्ग के लिए कक्षा का नाम उपयोग करता है)। इसे -1 मान के साथ काम करने के लिए, मैंने अपने भेदभावकर्ता प्रकार को बाइट से sbyte में भी बदल दिया।

संपादित करें: मैं याद किया कि इस DiscriminateSubClassesOnColumn को दूसरा पैरामीटर उस डिफ़ॉल्ट मान लेता है। तो मेरे प्रश्न का सही उत्तर यह है:

DiscriminateSubClassesOnColumn<sbyte>("Type", (sbyte)-1) 
+0

बहुत धन्यवाद - मुझे भेदभावकर्ता के साथ एक समान समस्या नहीं थी। – Ted