2009-08-03 4 views
0

NHibernate에 내 객체 모델을 매핑하고 싶습니다. 저기 내 개념에 하나의 까다로운 부분이 있고 NHibernate에서 이것을 할 수 있는지 모르겠습니다.NHibernate - 트리 컬렉션을 매핑하는 방법

나무 컬렉션이 필요합니다. 두 가지 수업이 있습니다 (아래의 중요한 속성 만 표시). 구성 요소는 트리의 노드이고 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은 루트 노드 (직접 자식)의 컬렉션 만 가져야합니다. - Components 컬렉션. 이것은 one-to-half 매핑과 비슷합니다.) "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> 

편집 : 당신이 원하는 경우

하는 모든 구성 요소 알 그들의 ComponentGroup은 그 다음에 모두를 설정합니다. ComponentGroup.

그리고

모든 루트 구성 요소는 다음 가방을 변경하려는 경우 ComponentGroup에서 :

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

그래서 당신은 루트 요소 내가 필요 정확히

+0

, 감사 수를! – kuba53280

+0

다행히 도울 수 있어요 :) – sirrocco