2009-08-03 73 views
0

我想映射我的对象模型到NHibernate。在我的概念中有一个棘手的部分,我不知道是否有可能在NHibernate中做到这一点。NHibernate - 如何映射树的集合

我想收集一些树木。我有两个类(下面,只显示了重要的属性)。 Component是树的一个节点,ComponentGroup是一个树的集合。

public class Component 
{ 
    public Component Parent { get; set; } 
    public IList<Component> SubComponents { get; set; } 
    public ComponentGroup Group { get; set; } 
} 

public class ComponentGroup 
{ 
    public IList<Component> Components { get; set; } 
} 

现在我想每个组件知道哪个ComponentGroup它属于,所以我需要从每一个组件到ComponentGroup(集团物业)的参考。但ComponentGroup应该只有根节点(直接子项) - 组件集合的集合。所以这就像一对半的映射;)“一边”只参考“多”一边的一些项目。

你有什么想法如何使用NHibernate映射这样的东西?

回答

0

我给它一个镜头(带FluentNHibernate生成)

<class name="Component" table="`Component`" xmlns="urn:nhibernate-mapping-2.2"> 
<id name="ComponentId" type="Int32" column="ComponentId"> 
    <generator class="identity" /> 
</id> 
<many-to-one name="Parent" column="ParentId" /> 
<bag name="SubComponents"> 
    <key column="ComponentId" /> 
    <one-to-many class="NHibernateTests.Component, NHibernateTests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</bag> 
<many-to-one name="Group" column="GroupId" /> 

<class name="ComponentGroup" table="`ComponentGroup`" xmlns="urn:nhibernate-mapping-2.2"> 
<id name="Id" type="Int32" column="ComponentGroupId"> 
    <generator class="identity" /> 
</id> 
<bag name="Components"> 
    <key column="ComponentGroupId" /> 
    <one-to-many class="NHibernateTests.Component, NHibernateTests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</bag> 

编辑:

如果你希望所有的组件知道他们的ComponentGroup然后在它们的全部上设置了ComponentGroup。

而且在ComponentGroup如果你希望所有的根组件才改变袋:

<bag name="Components" where="ParentId is null"> 

,所以你只能得到根组件

+0

这正是我需要的,谢谢! – kuba53280 2009-08-04 13:45:59