Иерархия родительских и дочерних деревьев с помощью NHibernate - PullRequest
1 голос
/ 18 июня 2009

У меня есть группа. Эта группа может содержать группы, и это необходимо сопоставить с помощью NHibernate. Я делал это раньше, но на этот раз я получил существующую базу данных, которая на самом деле не хранит данные так, как мне бы этого хотелось.

База данных выглядит так:

Группы

Id

Groups_Link

ParentId ChildId

Понятия не имею, как это отобразить?

Edit:

Похоже, это не так просто. Одна группа может существовать как дочерняя для нескольких групп. Думаю, это должна быть ассоциация «многие ко многим». Ну, еще предстоит выяснить, как это сделать. Будем очень благодарны за любые подсказки!

Edit:

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

Ответы [ 2 ]

0 голосов
/ 03 июля 2009

Как вы говорите, это просто многие ко многим, у которых один и тот же класс с обеих сторон объединения. Итак:

<class name="G.Group, G" table="GROUPS">

  <id column="Id" name="Id">
    <generator class="guid"/>
  </id>

  <set name="Parents" table="Groups_Link" cascade="save-update">
    <key column="ChildId"/>
    <many-to-many class="G.Group, G" column="ParentId"/>
  </set>

  <set name="Children" table="Groups_Link" cascade="save-update" inverse="true">
    <key column="ParentId" />
    <many-to-many class="G.Group, G" column="ChildId"/>
  </set>

</class>
0 голосов
/ 18 июня 2009

Я сопоставил похожую структуру, как:

<class name="Folder" lazy="false">

    <id column="Id" name="Id">
        <generator class="guid"/>
    </id>

    <property name="Name" column="FolderText"></property>
    <bag  name="Children" cascade="all" fetch="subselect" inverse="true">
        <key  column="ParentId" />
        <one-to-many class="Folder" />
    </bag>

    <many-to-one class="Folder" name="Parent" column="ParentId" insert="true" />

Редактировать

Сейчас я делаю полный снимок в темноте, потому что ваша схема - не то, что я использовал, и теперь я понимаю, почему вы спросили это :-) В любом случае, вот мысль. Пожалуйста, дайте нам знать, если это сработало, если вы найдете другое решение:

    <join fetch="join" table="GroupLinks">
        <key column="ChildId"></key>
        <many-to-one name="Parent" class="Folder" column="ParentId"/>
    </join>

У меня могут быть отношения в обратном направлении, но это, по крайней мере, даст вам родителей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...