2013-05-02 35 views
0

我在Foo类中有一个排序列表。我读的索引列必须是顺序的,并在0开始和1,2,3,4,5 ...NHibernate中的排序列表,无序列号

在我的情况,在order列我有0,1,2,5。所以Foo对象有一个长度为6的列表。位置3和4为空。

这是地图

<list name="Bars" cascade="all-delete-orphan"> 
    <key column="Foo_id" /> 
    <index column="order" /> 
    <one-to-many class="Bar" /> 
</list> 

我怎么能改写地图,以消除这种空位置?

回答

0

我也有类似的情况,由于我们在表中采用了传统的理念:我们的索引列总是以,在位置剩下的总是一个讨厌的空值,当我们重新集合的列表。

我们的解决方案是将这些集合用作ISet

为了保持顺序,我们现在把order-by attribute in our mappings,并控制自己的索引持久性。

使用你的榜样,这将成为:

<set name="Bars" cascade="all-delete-orphan" order-by="order"> 
    <key column="Foo_id" /> 
    <one-to-many class="Bar" /> 
</set> 

PS:不要忘了到您的收藏变量类型更改为Iesi.Collections.Generic.ISet(Of Bar)

+0

你可以使用包,如果你不相同你希望你的收藏是独一无二的。 – rie819 2013-05-02 14:17:58

+0

我不想看起来很迂腐,但是在代码中有一个错字:你忘了把它当作''......(对我的特殊问题仍然没有帮助) – jmodrak 2013-11-22 06:35:04

+0

@jmodrak感谢你的注意。修复! – 2013-11-22 10:43:18