के साथ विरासत मानचित्रण निम्नलिखित परिदृश्य को देखते हुए, मैं Fluent NHibernate का उपयोग कर डेटाबेस स्कीमा में प्रकार पदानुक्रम को मानचित्र बनाना चाहता हूं।Fluent NHibernate
मैं NHibernate 2,0
प्रकार पदानुक्रम
public abstract class Item
{
public virtual int ItemId { get; set; }
public virtual string ItemType { get; set; }
public virtual string FieldA { get; set; }
}
public abstract class SubItem : Item
{
public virtual string FieldB { get; set; }
}
public class ConcreteItemX : SubItem
{
public virtual string FieldC { get; set; }
}
public class ConcreteItemY : Item
{
public virtual string FieldD { get; set; }
}
Item
और SubItem
कक्षाओं का उपयोग कर रहा सार हैं।
डाटाबेस स्कीमा
+----------+ +---------------+ +---------------+ | Item | | ConcreteItemX | | ConcreteItemY | +==========+ +===============+ +===============+ | ItemId | | ItemId | | ItemId | | ItemType | | FieldC | | FieldD | | FieldA | +---------------+ +---------------+ | FieldB | +----------+
ItemType
क्षेत्र ठोस प्रकार निर्धारित करता है।
ConcreteItemX
तालिका में प्रत्येक रिकॉर्ड Item
तालिका में एक समान रिकॉर्ड है; इसी प्रकार ConcreteItemY
तालिका के लिए।
FieldB
आइटम प्रकार ConcreteItemY
है, तो हमेशा शून्य होता है।
मानचित्रण (अब तक)
public class ItemMap : ClassMap<Item>
{
public ItemMap()
{
WithTable("Item");
Id(x => x.ItemId, "ItemId");
Map(x => x.FieldA, "FieldA");
JoinedSubClass<ConcreteItemX>("ItemId", MapConcreteItemX);
JoinedSubClass<ConcreteItemY>("ItemId", MapConcreteItemY);
}
private static void MapConcreteItemX(JoinedSubClassPart<ConcreteItemX> part)
{
part.WithTableName("ConcreteItemX");
part.Map(x => x.FieldC, "FieldC");
}
private static void MapConcreteItemY(JoinedSubClassPart<ConcreteItemY> part)
{
part.WithTableName("ConcreteItemX");
part.Map(x => x.FieldD, "FieldD");
}
}
FieldB
मैप नहीं है।
प्रश्न
मैं कैसे धाराप्रवाह NHibernate का उपयोग कर SubItem
वर्ग के FieldB
संपत्ति मैप करते हैं?
क्या कोई तरीका है कि मैं ItemType
फ़ील्ड का उपयोग कर DiscriminateSubClassesOnColumn
का लाभ उठा सकता हूं?
परिशिष्ट
मैं एक hbm.xml फ़ाइल का उपयोग कर वांछित परिणाम प्राप्त करने में सक्षम हूँ:
<class name="Item" table="Item">
<id name="ItemId" type="Int32" column="ItemId">
<generator class="native"/>
</id>
<discriminator column="ItemType" type="string"/>
<property name="FieldA" column="FieldA"/>
<subclass name="ConcreteItemX" discriminator-value="ConcreteItemX">
<!-- Note the FieldB mapping here -->
<property name="FieldB" column="FieldB"/>
<join table="ConcreteItemX">
<key column="ItemId"/>
<property name="FieldC" column="FieldC"/>
</join>
</subclass>
<subclass name="ConcreteItemY" discriminator-value="ConcreteItemY">
<join table="ConcreteItemY">
<key column="ItemId"/>
<property name="FieldD" column="FieldD"/>
</join>
</subclass>
</class>
मैं ऊपर मानचित्रण धाराप्रवाह NHibernate का उपयोग कर कैसे पूरा करते हैं?
फ़्लुएंट एनएचबेर्नेट का उपयोग करके तालिका-प्रति-उप-वर्ग के साथ टेबल-प्रति-श्रेणी-पदानुक्रम को मिश्रित करना संभव है?
किसी भी कारण से यह समुदाय विकी चिह्नित है? किसी भी मामले में, क्या आप मानचित्रण रणनीति का उपयोग कर सकते हैं जिसका आप उपयोग कर रहे हैं? JoinSubClassPart तालिका-प्रति-सबक्लास पैटर्न का तात्पर्य है लेकिन कह रहा है कि आइटम तालिका में ठोस आइटम बनाए रखा जाता है, तालिका-प्रति-श्रेणी-पदानुक्रम पैटर्न का तात्पर्य है। –
मुझे यकीन नहीं है कि समुदाय विकी सेटिंग कैसे बदलें। फील्डबी को अनदेखा करते हुए, मैं टेबल-प्रति-सबक्लास का उपयोग कर सकता हूं। फील्डबी की उपस्थिति मुझे कुछ भ्रम का कारण बनती है। यह दो रणनीतियों का मिश्रण प्रतीत होता है। ConcreteItemX प्रकार SubItem से FieldB विरासत में मिलता है। आइटम तालिका में फ़ील्डबी जारी है। –