我有兩個類:container
其中包含動態有序列表Element
。如何在nhibernate中映射有序列表?
我應該使用什麼C#集合?
你建議我什麼數據庫模式?
我應該如何配置nhibernate映射?
TIA
我有兩個類:container
其中包含動態有序列表Element
。如何在nhibernate中映射有序列表?
我應該使用什麼C#集合?
你建議我什麼數據庫模式?
我應該如何配置nhibernate映射?
TIA
NHibernate的支持System.Collections.SortedList和Iesi.Collections.SortedSet實現集合。你必須在映射文件中指定一個比較器:
<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>
sort屬性中允許的值是無序,自然和實施System.Collections.IComparer一類的名稱。
如果您希望數據庫本身對集合元素進行排序,請使用set,bag或map映射的order-by屬性。這會在SQL查詢中執行排序,而不是在內存中執行。
設置order-by屬性告訴NHibernate在內部爲字典和集合使用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>
請注意,order by屬性的值是SQL排序,而不是HQL排序!
關聯甚至可以在運行時使用Filter()按照某些任意條件進行排序。
sortedUsers = s.Filter(group.Users, "order by this.Name");