0

循環依存関係のあるテーブルが2つあります。ATitleにはElementsがあり、それぞれがパス内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>
4

1 に答える 1

1

私があなたのモデルを理解しているように、あなたはタイトルから要素まで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>
于 2013-02-18T16:56:40.833 に答える