循環依存関係のあるテーブルが2つあります。ATitle
にはElement
sがあり、それぞれがパス内Element
の次のポイントを指しTitle
ます。
BuildSessionFactory()
ただし、インスタンスを呼び出すとNHibernate.Cfg.Configuration
、次の例外が発生します。
テーブルElementからの関連付けは、マップされていないクラスを参照します:ElementDAO
これは循環依存の結果であると思います(Elementを参照しているため、最初にTitleをマップすることはできません。また、Titleを知らずにElementをマップすることはできません)。
質問: 循環依存を解決するために2つのマッピングを組み合わせるにはどうすればよいですか?
関連データ(およびコードスニペット)は次のとおりです。
タイトル
- Id(主キー)
- 名前
エレメント
- id_Title(外部キー)
- 名前
- id_Title_Child(外部キー)
これらは、次のようなデータ構造を表します。
私のコード:
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>