我有一个小组。该组可以包含组,这需要与NHibernate映射。我以前做过这个,但是这次我得到了一个现有的数据库,它并没有像我希望的那样真正存储数据。
数据库如下所示:
组
编号
Groups_Link
的ParentId childID的
我不知道如何映射这个?
修改
似乎并不那么容易。一个小组可以作为一个孩子存在于多个小组中。所以它应该是我自己的多对多关联。好吧,还没弄明白怎么做。任何提示都会非常感激!
修改
我认为观点可以帮助我解决问题,但是对于插入,更新和删除视图似乎存在一些限制,这使得难以实现。
答案 0 :(得分:0)
我映射了类似的结构:
<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>
我可能会有倒退的关系,但这至少会让你成为父母。
答案 1 :(得分:0)
正如你所说,它只是一个多对多,碰巧在连接的两边都有相同的类。 所以:
<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>