0

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

木のコレクションが欲しいです。私には2つのクラスがあります(以下、重要なプロパティのみが示されています)。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には、ルートノード(直接の子)のコレクション(コンポーネントコレクション)のみを含める必要があります。したがって、これは1対半分のマッピングのようなものです;)「1つの」側は「多くの」側からのいくつかのアイテムのみを参照します。

NHibernateを使用してこのようなものをマッピングする方法について何かアイデアはありますか?

4

1 に答える 1

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"> 

したがって、ルートコンポーネントのみを取得します

于 2009-08-03T15:58:55.563 に答える