2009-08-03 17 views
0

私のオブジェクトモデルをNHibernateにマップしたい。私のコンセプトには1つのトリッキーな部分があり、NHibernateでこれを行うことが可能かどうかはわかりません。NHibernate - ツリーのコレクションをマップする方法

私は木々のコレクションを持っていたいです。私は2つのクラスを持っています(以下、重要なプロパティのみが示されています)。コンポーネントはツリーのノードであり、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はルートノード(直接の子)のコレクションのみを持つべきです - コンポーネントコレクション。これは1対1のマッピングのようなものです;) "one"側は、 "many"側からのいくつかの項目のみを参照しています。

あなたは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> 

EDITあげる:あなたはすべてのあなたのコンポーネントが知りたい場合は

をそれらのComponentGroupはすべてのComponentGroup。

とのComponentGroupでは、すべてのルートコンポーネントのみが、その後に袋を変更したい場合:

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

ので、あなただけのルート要素

+0

を取得し、私が必要とするまさにおかげだそれ! – kuba53280

+0

うれしい私は助けることができます:) – sirrocco

関連する問題