如何解决映射中的循环依赖?

时间:2013-02-18 16:43:31

标签: c# nhibernate hbm

我有2个具有循环依赖关系的表。 TitleElement个,而每个Element指向路径中的下一个Title

但是,当我在BuildSessionFactory()的实例上调用NHibernate.Cfg.Configuration时,我收到以下异常:

  

表Element中的关联是指未映射的类:   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 Mapping:

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

1 个答案:

答案 0 :(得分:1)

据我了解你的模型,你有一个从Title到Element的一对多关系,但它被映射为多对多。将其更改为:

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