我很难让我的头部周围的方式,我应该与NH实施有序的儿童关系。在NHibernate中存储一个订购的儿童收藏
在代码的世界里,我有:
class Parent
{
public Guid Id;
public IList<Child> Children;
}
class Child
{
public Guid Id;
public Parent Parent;
}
一个Parent
有Child[ren]
与订单列表。在现实中,Children
集合将包含独特的Child
S的将被其他代码执行(即,它会永远不可能添加相同的孩子收集两次 - 所以我不真正关心如果NH集合强制执行此)
我应该如何实现两个类的映射?
从我的理解:
Bags
没有订单,所以我不希望这Sets
没有秩序,但我可以用order-by
做一些SQL排序,但我订的是什么?我不能依靠顺序ID。所以我不想要这个?Lists
是一个免副本的集合,其中unique-key是PK
和index
列,所以我确实需要这个?
所以,使用list
,我有以下几点:
<list cascade="all-delete-orphan" inverse="true" name="Children">
<key>
<column name="Parent_id" />
</key>
<index>
<column name="SortOrder" />
</index>
<one-to-many class="Child" />
</list>
当我插入一个父其上有一个孩子,我看到下面的SQL:
Insert into Child (id, Parent_id) values (@p0, @p1)
也就是说,为什么不插入SortOrder?
如果我做一个SchemaExport
SortOrder列在Child表上创建。
:(
如果我的关系设置Inverse="false"
,我看到相同的SQL同上,依次为:
UPDATE "Child" SET Parent_id = @p0, SortOrder = @p1 WHERE Id = @p2
为何仍INSERT
的PARENT_ID与inverse="false"
为什么不它与inverse="true"
插入SortOrder的?
上午我处理这个完全错误的?
是否也是如此,假设这是工作,如果我做的事:
parentInstance.Children.Remove(parentInstance.Children[0]);
拯救父母和重新加载它,那list
将有一个空位置0,而不是洗牌剩下的呢?
感谢