के साथ धाराप्रवाह मैपिंग्स को मिश्रण करना होगा क्या पैको ने कहा सही नहीं है। यह फ्लुएंट एनएचबेर्नेट में किया जा सकता है। मैंने अपने आप को थोड़ी देर में खोजा, किसी को भी इस विकल्प के बारे में बात नहीं कर सका, इसलिए मैंने अभी थोड़ा एफएनएचबर्ननेट के साथ खेला और अंततः इसे करने में कामयाब रहा।
यह मेरा परिदृश्य था:
मैं दो तालिकाओं है -
"FormFields" => Columns { "FieldId", "FieldName", "FieldType", "DisplayOrder" }
"FormStructure" => Columns { "FormId", "FormType", "FieldId" }
इन थे मेरी संस्थाओं:
public class FormStructure
{
public virtual Int32 FormId { get; private set; }
public virtual Int32 FormType { get; set; }
public virtual FormField FieldId { get; set; }
}
public class FormField
{
public virtual int FieldId { get; private set; }
public virtual String FieldName { get; set; }
public virtual int? FieldType { get; set; }
public virtual int? DisplayOrder { get; set; }
}
मैं अपने प्रश्न में तरीकों की एक जोड़ी है कि एक सूची प्रदान की है FormStructure
वस्तुओं की। मैं इन विधियों को DisplayOrder
फ़ील्ड द्वारा FormField
ऑब्जेक्ट में आदेश देने के लिए आदेश देना चाहता था, और DisplayOrder
FormStructure
ऑब्जेक्ट में अन्य कारणों से भी संपत्ति के रूप में उपलब्ध होना चाहता था।
यह मूलतः इसका मतलब है मैं टेबल में शामिल होने के लिए इतना है कि मैं, FormField
मेज से DisplayOrder
स्तंभ के साथ FormStructure मेज से सभी स्तंभों को पुनः प्राप्त होगा मिलान FieldId
स्तंभों पर उन्हें शामिल होने की जरूरत है।
क्या मैं इस को हल करने के लिए क्या किया:
मैं अपने FormStructure
वस्तु में कोई प्रॉपर्टी DisplayOrder कहा जाता है।
public virtual int? DisplayOrder { get; set; }
मैं अपने FormStructure
मानचित्रण वर्ग के लिए Join
विधि जोड़ा तो यह इस तरह देखा।
public class FormStructureMap : ClassMap<FormStructure>
{
public FormStructureMap()
{
Table("FormStructure");
Id(x => x.Id);
Map(x => x.FormType);
References(x => x.Schedule).Column("ScheduleId");
References(x => x.Field).Column("FieldId");
Map(x => x.IsMandatory).Nullable();
Join("FormFields", m =>
{
m.Fetch.Join();
m.KeyColumn("FieldId");
m.Map(t => t.DisplayOrder).Nullable();
});
}
}
Join
विधि स्पष्ट रूप से आप के भीतर से जुड़ें KeyColumn विधि में निर्धारित स्तंभ पर दो तालिकाओं के बीच में शामिल हो जाएगा।
यह कुछ पंक्तियों को भी हटा देगा जिनमें शून्य मान हैं। इससे बचने के लिए (मैंने हाल ही में इसमें भाग लिया) आप विधि के अंदर m.Optional();
जोड़ सकते हैं।
मैं अब, FormStructure
वस्तुओं की सूची प्राप्त कर सकता है DisplayOrder
से उन्हें ऑर्डर और यहां तक कि FormStructure
वस्तु में एक संपत्ति के रूप में DisplayOrder
उपलब्ध है।
return session.CreateCriteria<FormStructure>()
.Add(Expression.Eq("FieldName", fieldName))
.AddOrder(Order.Asc("DisplayOrder"))
.List<FormStructure>();
यह पहले नहीं किया जा सकता था, क्योंकि यह आदेश खंड मैं वहाँ है में DisplayOrder
स्तंभ मान्यता प्राप्त नहीं होता।
दिलचस्प, हालांकि, Subclass मैपिंग के साथ जॉइन() विधि पर प्रलेखन में शामिल होने के लिए दूसरे क्रिया तर्क के लिए कहते हैं() -> "यह केवल तभी काम करता है जब आप तालिका-प्रति-विरासत पदानुक्रम रणनीति में हों। – PandaWood