NHibernate-木のコレクションをマップする方法
-
10-07-2019 - |
質問
オブジェクトモデルを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">
したがって、ルートコンポーネントのみを取得します
所属していません StackOverflow