我有2个具有循环依赖关系的表。 Title
有Element
个,而每个Element
指向路径中的下一个Title
。
但是,当我在BuildSessionFactory()
的实例上调用NHibernate.Cfg.Configuration
时,我收到以下异常:
表Element中的关联是指未映射的类: ElementDAO
我认为这是循环依赖的结果(它不能首先映射Title,因为它引用了Element,并且它不能在不知道Title的情况下映射Element)。
问题: 如何组合两个映射以解决循环依赖?
相关数据(和代码段)如下:
标题
元素
它们代表了这样的数据结构:
我的代码:
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>
答案 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>