2013-02-18 69 views
0

我有2個表具有循環依賴性。 A Title具有Element s,並且每個Element指向路徑中的下一個Title如何解決映射中的循環依賴關係?

然而,當我打電話BuildSessionFactory()我的NHibernate.Cfg.Configuration比如我收到以下異常: ElementDAO

我相信這一點:

從表元素是指未映射類的關聯是循環依賴關係的結果(它不能首先映射Title,因爲它引用了Element,並且它不能在不知道Title的情況下映射Element)。

問題: 如何結合兩個映射來解決循環依賴?

相關數據(和代碼段)如下:

標題

  • ID(主鍵)
  • 名稱

  • 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

據我瞭解你的模型,你有一個單從標題到元素的多對多關係但它被映射爲多對多。將其更改爲:

<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>