2011-11-24 13 views
5

मेरे पास दो वर्ग हैं: container जिसमें Element की गतिशील आदेशित सूची शामिल है।nhibernate में आदेश दिया गया सूची कैसे मानचित्र करें?

मुझे क्या सी # संग्रह का उपयोग करना चाहिए?

आप मुझे क्या डीबी स्कीमा सुझाएंगे?

मुझे निबर्ननेट मैपिंग को कैसे कॉन्फ़िगर करना चाहिए?

TIA

उत्तर

5

NHibernate System.Collections.SortedList और Iesi.Collections.SortedSet द्वारा कार्यान्वित संग्रह का समर्थन करता है। आप मैपिंग फ़ाइल में एक comparer उल्लेख करना होगा:

<set name="Aliases" table="person_aliases" sort="natural"> 
    <key column="person"/> 
    <element column="name" type="String"/> 
</set> 

<map name="Holidays" sort="My.Custom.HolidayComparer, MyAssembly" lazy="true"> 
    <key column="year_id"/> 
    <index column="hol_name" type="String"/> 
    <element column="hol_date" type="Date"/> 
</map> 

प्रकार विशेषता का अनुमत मान, अवर्गीकृत प्राकृतिक और एक वर्ग System.Collections.IComparer को लागू करने के नाम पर कर रहे हैं।

यदि आप चाहते हैं कि संग्रह तत्व ऑर्डर करने के लिए डेटाबेस स्वयं सेट, बैग या मैप मैपिंग के ऑर्डर द्वारा ऑर्डर करें। यह SQL क्वेरी में ऑर्डरिंग करता है, स्मृति में नहीं।

ऑर्डर-ऑर्डर द्वारा ऑब्जेक्ट को सेट करना एनएचबर्ननेट को तत्वों के क्रम को बनाए रखने, शब्दकोशों और सेटों के लिए आंतरिक रूप से ListDictionary या ListSet क्लास का उपयोग करने के लिए कहता है। ध्यान दें कि इन संग्रहों पर लुकअप ऑपरेशंस बहुत धीमे होते हैं यदि उनमें कुछ तत्वों से अधिक होते हैं।

<set name="Aliases" table="person_aliases" order-by="name asc"> 
    <key column="person"/> 
    <element column="name" type="String"/> 
</set> 

<map name="Holidays" order-by="hol_date, hol_name" lazy="true"> 
    <key column="year_id"/> 
    <index column="hol_name" type="String"/> 
    <element column="hol_date type="Date"/> 
</map> 

ध्यान दें कि ऑर्डर द्वारा ऑर्डर का मान एक SQL ऑर्डरिंग है, न कि एचक्यूएल ऑर्डरिंग!

एसोसिएशन को फ़िल्टर() का उपयोग करके रनटाइम पर कुछ मनमाने ढंग से मानदंडों द्वारा भी हल किया जा सकता है।

sortedUsers = s.Filter(group.Users, "order by this.Name"); 

स्रोत: NHibernate and Sorted Collections

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