nhibernate- 나무 수집을 매핑하는 방법
-
10-07-2019 - |
문제
내 객체 모델을 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">
따라서 루트 구성 요소 만 얻습니다
제휴하지 않습니다 StackOverflow