Как разрешить циклические зависимости в сопоставлениях?

У меня есть 2 таблицы с циклической зависимостью. Title имеет Elements, и, в свою очередь, каждый Element указывает на следующий Title в пути.

Однако, когда я вызываю BuildSessionFactory() в своем экземпляре NHibernate.Cfg.Configuration, я получаю следующее исключение:

Ассоциация из таблицы Element относится к несопоставленному классу: ElementDAO

Я считаю, что это результат циклических зависимостей (он не может сначала сопоставить заголовок, потому что он ссылается на элемент, и он не может сопоставить элемент, не зная заголовка).

Вопрос. Как объединить два сопоставления, чтобы устранить циклические зависимости?

Соответствующие данные (и фрагменты кода) приведены ниже:

Название

  • Идентификатор (первичный ключ)
  • Имя

Элемент

  • id_Title (внешний ключ)
  • Имя
  • id_Title_Child (внешний ключ)

Они представляют собой следующую структуру данных: График, показывающий взаимосвязь таблиц

Мой код:

НазваниеDAO:

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>

ЭлементДАО:

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>

person James    schedule 18.02.2013    source источник


Ответы (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>
person Jamie Ide    schedule 18.02.2013