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