2013-02-18 3 views
0

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

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

ассоциацию из таблицы элементов относится к неподключенному класса: ElementDAO

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

Вопрос: Как объединить два сопоставления для разрешения круговых зависимостей?

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

Название

  • Id (первичный ключ)
  • Имя

Элемент

  • id_Title (Foreign Key)
  • Имя
  • id_Title_Child (Foreign Key)

Они представляют собой структуру данных, например, так: 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 Mapping:

<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

Как я понимаю вашу модель, у вас есть одно to-many отношения от Title to Elemen t, но он отображается как много-ко-многим. Измените его на:

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