Tengo dos clases: container
que contiene la lista dinámica ordenada de Element
.cómo mapear la lista ordenada en nhibernate?
¿Qué colección de C# debo usar?
¿Qué esquema de DB me sugerirías?
¿Cómo debo configurar el mapeo nhibernate?
TIA
Tengo dos clases: container
que contiene la lista dinámica ordenada de Element
.cómo mapear la lista ordenada en nhibernate?
¿Qué colección de C# debo usar?
¿Qué esquema de DB me sugerirías?
¿Cómo debo configurar el mapeo nhibernate?
TIA
NHibernate apoya colecciones implementadas por System.Collections.SortedList y Iesi.Collections.SortedSet. Debe especificar un comparador en el archivo de asignación:
<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>
valores permitidos del atributo tipo están ordenados, natural y el nombre de una clase que implementa System.Collections.IComparer.
Si desea que la base de datos en sí solicite los elementos de colección, utilice el atributo de orden de asignaciones de conjuntos, bolsas o mapas. Esto realiza el pedido en la consulta SQL, no en la memoria.
El establecimiento del atributo de pedido le indica a NHibernate que use la clase ListDictionary o ListSet internamente para diccionarios y conjuntos, manteniendo el orden de los elementos. Tenga en cuenta que las operaciones de búsqueda en estas colecciones son muy lentas si contienen más de unos pocos elementos.
<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>
Tenga en cuenta que el valor del pedido por el atributo es un pedido SQL, no un pedido HQL!
Las asociaciones pueden incluso ordenarse por algún criterio arbitrario en tiempo de ejecución utilizando un filtro().
sortedUsers = s.Filter(group.Users, "order by this.Name");