質問

オブジェクトモデルを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; }
}

ここで、各ComponentがどのComponentGroupに属しているかを知りたいので、すべてのComponentからComponentGroup(Groupプロパティ)への参照が必要です。ただし、ComponentGroupにはルートノード(直接の子)のコレクション(コンポーネントコレクション)のみが必要です。したがって、これは1対半分のマッピングのようなものです;)&quot; one&quot;側は、「多数」の一部のアイテムのみを参照しています。側。

NHibernateを使用してこのようなマップを作成する方法はありますか?

役に立ちましたか?

解決

試してみる(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"> 

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top