2013-02-18 2 views
0

순환 의존성이있는 2 개의 테이블이 있습니다. A TitleElement 초이며 차례로 각 Element은 경로의 Title을 가리 킵니다. ElementDAO매핑의 순환 종속성은 어떻게 해결합니까?

내가 믿을 :

요소가 매핑되지 않은 클래스를 참조하는 테이블의 연관 : 나는 NHibernate.Cfg.Configuration의 내 인스턴스 BuildSessionFactory()를 호출 할 때

그러나, 나는 다음과 같은 예외를받을 순환 종속성의 결과입니다 (요소를 참조하므로 제목을 먼저 매핑 할 수 없으며 제목을 모른 채 요소를 매핑 할 수 없습니다).

질문 : 어떻게 순환 종속성을 해결하기 위해 두 개의 매핑을 결합합니까?

관련 데이터 (및 코드 조각) 다음과

제목

  • 아이디 (기본 키)
  • 이름

요소

  • id_Title (외래 키)
  • 이름
  • id_Title_Child (외래 키)

그들은과 같이 데이터 구조를 나타냅니다 Graph showing relationship of tables

내 코드 :

TitleDAO :

public class TitleDAO{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual ICollection<ElementDAO> Elements { get; set; } 
} 

TitleDAO 매핑 :

<class name="TitleDAO" table="Title" lazy="true"> 
    <id name="Id"> 
     <generator class="identity"/> 
    </id> 
    <property name="Name"/> 
    <set name="Elements" table="Element" lazy="true"> 
     <key column="id_Title"/> 
     <many-to-many class="ElementDAO"/> 
    </set> 
</class> 

ElementDAO :

public class ElementDAO{ 
    public virtual string Name { get; set; } 
    public virtual TitleDAO Child { get; set; } 
} 

ElementDAO 매핑 :

<class name="ElementDAO" table="Element" lazy="true"> 
    <property name="Name"/> 
    <many-to-one name="Child" class="TitleDAO" column="id_Title_Child"/> 
</class> 

답변

1

내가 모델을 알고있는 것처럼,들은 1 년이 타이틀에서 Elemen으로의 다 대다 관계 그러나 그것은 many-to-many로 매핑된다. 변경 :

<class name="TitleDAO" table="Title" lazy="true"> 
    <id name="Id"> 
     <generator class="identity"/> 
    </id> 
    <property name="Name"/> 
    <set name="Elements" table="Element" lazy="true"> 
     <key column="id_Title"/> 
     <!-- change this to one-to-many --> 
     <one-to-many class="ElementDAO"/> 
    </set> 
</class> 
관련 문제