首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有额外列nhibernate的多对多列

具有额外列nhibernate的多对多列
EN

Stack Overflow用户
提问于 2014-03-21 15:36:02
回答 1查看 3.4K关注 0票数 3

所以我有两个桌子UsersGroups。这些表(在数据库中)与UGlink链接表相似。现在,除了主外键之外,链表还有一个额外的列:Date

据我所知,这意味着我必须有两个多对一,与链接“在中间”。

然而,由于我几乎从不对额外的列值感兴趣,那么是否存在避免链接的问题呢?那就是我想要能够写:

代码语言:javascript
运行
复制
thisUser.Groups

以获得组,而不是:

代码语言:javascript
运行
复制
thisUser.UGlinks.Group

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-21 16:17:37

当然,many-to-many是在NHibernate中支持的,它没有将配对表显式映射为一个实体。因此,如果日期列是自动生成的,或者是可空的(不一定要由app/NHiberante插入),我们可以这样做:6.8。双向关联

代码语言:javascript
运行
复制
<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确实关心配对表,我们可以这样做:

代码语言:javascript
运行
复制
thisUser.Groups

但是如果我能建议的话,不要和many-to-many一起去。多对一的配对对象是(我想说)更好的解决方案,因为它将支持按组搜索用户,反之亦然。

第24章。最佳实践,引文:

不使用外来关联映射. 真正的多到多关联的良好用法是罕见的。大多数情况下,您需要存储在“链接表”中的其他信息。在这种情况下,最好将两个一对多的关联用于中间链接类。事实上,我们认为大多数的关联是一对多的和多对一的,在使用任何其他的关联风格时,你应该小心,并问自己是否真的有必要。

下面是一些更详细的说明,说明如何在没有多对多的情况下完成这项工作:Nhibernate:如何用一对多的关系来表示多到多的关系?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22563082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档