Ho due classi: container
che contiene l'elenco dinamico ordinato di Element
.come mappare l'elenco ordinato in nibernato?
Quale raccolta C# devo utilizzare?
Quale schema DB mi suggeriresti?
Come devo configurare la mappatura Nhibernate?
TIA
Ho due classi: container
che contiene l'elenco dinamico ordinato di Element
.come mappare l'elenco ordinato in nibernato?
Quale raccolta C# devo utilizzare?
Quale schema DB mi suggeriresti?
Come devo configurare la mappatura Nhibernate?
TIA
NHibernate supporta collezioni implementate da System.Collections.SortedList e Iesi.Collections.SortedSet. È necessario specificare un operatore di confronto nel file di mapping:
<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>
valori ammessi dell'attributo tipo sono indifferenziati, naturale e il nome di una classe che implementa System.Collections.IComparer.
Se si desidera che il database stesso ordini gli elementi di raccolta, utilizzare l'attributo order-by di mappature set, bag o map. Questo esegue l'ordine nella query SQL, non in memoria.
L'impostazione dell'attributo order-by indica a NHibernate di utilizzare la classe ListDictionary o ListSet internamente per dizionari e insiemi, mantenendo l'ordine degli elementi. Nota che le operazioni di ricerca su queste raccolte sono molto lente se contengono più di pochi elementi.
<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>
Si noti che il valore dell'attributo order-by è un ordinamento SQL, non un ordinamento HQL!
Le associazioni possono anche essere ordinate in base a criteri arbitrari in fase di runtime utilizzando un filtro().
sortedUsers = s.Filter(group.Users, "order by this.Name");