Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多对多,带有额外的列nhibernate_C#_Nhibernate - Fatal编程技术网

C# 多对多,带有额外的列nhibernate

C# 多对多,带有额外的列nhibernate,c#,nhibernate,C#,Nhibernate,因此,我有两个表用户和组。这些表(在数据库中)与UGlink链接表相似。现在,除了主外键外,链接表还有一个额外的列:Date 据我所知,这意味着我必须有两个多对一,链接“在中间” 然而,由于我几乎从未对额外的列值感兴趣,是否有任何方法可以避免链接?这就是我想要能够写的: thisUser.Groups 要获取组,请执行以下操作,而不是: thisUser.UGlinks.Group 多对多,没有将配对表作为一个实体进行显式映射,当然支持NHibernate。因此,如果日期列是自动生成的,或者

因此,我有两个表
用户
。这些表(在数据库中)与
UGlink
链接表相似。现在,除了主外键外,链接表还有一个额外的列:
Date

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

然而,由于我几乎从未对额外的列值感兴趣,是否有任何方法可以避免链接?这就是我想要能够写的:

thisUser.Groups
要获取组,请执行以下操作,而不是:

thisUser.UGlinks.Group

多对多,没有将配对表作为一个实体进行显式映射,当然支持NHibernate。因此,如果日期列是自动生成的,或者可以为空(不必由app/NHiberante插入),我们可以按如下方式执行:

但是如果我可以建议的话,不要使用多对多。多对一配对对象是(我认为)更好的解决方案,因为它支持按组搜索用户,反之亦然

见,引用:

不要使用外来关联映射。

真正多对多关联的好用例很少。大多数情况下,您需要存储在“链接表”中的其他信息。在这种情况下,最好对中间链接类使用两个一对多关联。事实上,我们认为大多数关联都是一对多和多对一的,在使用任何其他关联样式时都应该小心,问问自己这是否真的必要


这里有一些更详细的解释,说明如何在没有多对多的情况下实现这一点:

“但是,因为我几乎对额外的列值不感兴趣”,要么你需要解释,要么你不需要,到底是什么?我有时会需要它。那么你会同意半径的答案吗@MatthewI不同意“真正的多对多关联的好用例很少”的指导意见。当将实体链接到值或查找对象时,它们经常出现。我的经验不同——将配对表映射为实体只会带来好处。通常,您可以使用配对对象进行子查询,并在筛选
组时搜索
用户
。事实上,在避免使用多对多
时,映射量非常小。。。但是/而且最终的好处是无价的。。。根据我的经验,无论如何,最佳实践链接已经移动:
<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>
thisUser.Groups