문제

내 객체 모델을 nhibernate에 맵핑하고 싶습니다. 내 개념에는 한 가지 까다로운 부분이 있으며 Nhibernate 에서이 작업을 수행 할 수 있는지 모르겠습니다.

나는 나무 모음을 갖고 싶다. 두 개의 클래스가 있습니다 (아래에는 중요한 속성 만 표시). 구성 요소는 나무의 노드이며 구성 요소 그룹은 나무 모음입니다.

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에는 루트 노드 (직접 어린이) - 구성 요소 모음 만 있어야합니다. 따라서 이것은 일대일 매핑과 같은 것입니다.) "One"측면은 "많은"측면의 일부 항목 만 참조합니다.

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에서 모든 루트 구성 요소 만 원한다면 가방을 다음으로 변경합니다.

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

따라서 루트 구성 요소 만 얻습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top