所以我有两个桌子Users和Groups。这些表(在数据库中)与UGlink链接表相似。现在,除了主外键之外,链表还有一个额外的列:Date。
据我所知,这意味着我必须有两个多对一,与链接“在中间”。
然而,由于我几乎从不对额外的列值感兴趣,那么是否存在避免链接的问题呢?那就是我想要能够写:
thisUser.Groups以获得组,而不是:
thisUser.UGlinks.Group

发布于 2014-03-21 16:17:37
当然,many-to-many是在NHibernate中支持的,它没有将配对表显式映射为一个实体。因此,如果日期列是自动生成的,或者是可空的(不一定要由app/NHiberante插入),我们可以这样做:6.8。双向关联
<class name="User">
<id name="Id" column="Uid"/>
...
<bag name="Groups" table="UGlink" lazy="true">
<key column="Uid"/>
<many-to-many class="Group" column="Gid"/>
</bag>
</class>
<class name="Group">
<id name="id" column="Gid"/>
...
<!-- inverse end -->
<bag name="Users" table="UGlink" inverse="true" lazy="true">
<key column="Gid"/>
<many-to-many class="User" column="Uid"/>
</bag>
</class>因此,我们有一个映射,在这个映射中,NHiberante确实关心配对表,我们可以这样做:
thisUser.Groups但是如果我能建议的话,不要和many-to-many一起去。多对一的配对对象是(我想说)更好的解决方案,因为它将支持按组搜索用户,反之亦然。
见第24章。最佳实践,引文:
不使用外来关联映射. 真正的多到多关联的良好用法是罕见的。大多数情况下,您需要存储在“链接表”中的其他信息。在这种情况下,最好将两个一对多的关联用于中间链接类。事实上,我们认为大多数的关联是一对多的和多对一的,在使用任何其他的关联风格时,你应该小心,并问自己是否真的有必要。
下面是一些更详细的说明,说明如何在没有多对多的情况下完成这项工作:Nhibernate:如何用一对多的关系来表示多到多的关系?。
https://stackoverflow.com/questions/22563082
复制相似问题