具有NHibernate的父子树层次结构

具有NHibernate的父子树层次结构,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我有一个小组。该组可以包含组,并且需要使用NHibernate映射。我以前做过,但这次我得到了一个现有的数据库,它并没有像我希望的那样真正存储数据 数据库如下所示: 团体 身份证 群组链接 父ID 孩子气的 我不知道如何绘制这张地图 编辑: 好像没那么容易。一个组可以作为多个组的子组存在。所以我想这应该是一种多对多的关联。嗯,我还没有弄明白怎么做。任何提示都将不胜感激 编辑: 我原以为视图可以帮助我解决这个问题,但在视图的插入、更新和删除方面似乎有一些限制,这使得它很困难。我映射了一个类似的结构

我有一个小组。该组可以包含组,并且需要使用NHibernate映射。我以前做过,但这次我得到了一个现有的数据库,它并没有像我希望的那样真正存储数据

数据库如下所示:

团体

身份证

群组链接

父ID 孩子气的

我不知道如何绘制这张地图

编辑:

好像没那么容易。一个组可以作为多个组的子组存在。所以我想这应该是一种多对多的关联。嗯,我还没有弄明白怎么做。任何提示都将不胜感激

编辑:


我原以为视图可以帮助我解决这个问题,但在视图的插入、更新和删除方面似乎有一些限制,这使得它很困难。

我映射了一个类似的结构,如:

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


我的关系可能会倒退,但这至少会让你成为父母

正如您所说,只是多对多恰好在连接的两侧都有相同的类。 因此:



但这并不能解决组链接表的问题。如果我理解正确,那么只有在Groups表中有ParentId时,映射才会起作用?还是我错过了更多的最后多对一?很抱歉,您的模式表示不清楚。我还以为这是一张表,在我尝试你发布的地图之前,我还有一些事情要解决。大约三个小时后,我会报告结果,让你知道它是否有效。尝试过,但无法使其发挥作用。是时候回家了。也许我以后会继续。好的,我会在完成后公布结果。如果有更多的想法,我们将不胜感激。
<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>