2009-08-03 72 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