在使用流利的nhibernate时,我是否做了很多对很多的错误操作
本文关键字:操作 错误 是否 nhibernate | 更新日期: 2023-09-27 17:57:59
我有两个主要实体(数据库表)
- 项目
- 应用程序
我有一个名为ProjectApplication的桥接表,它有3个col(Id,ProjectId,ApplicationId)
一个项目可以有许多应用程序。一个应用程序可以在下面到许多不同的项目
您的基本多对多映射
目前这是我在流畅的nhibernate映射文件中设置的
public class ProjectMap
{
HasMany(x => x.ProjectApplications)
.AsBag().Inverse().Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(80);
}
public class ApplicationMap
{
HasMany(x => x.ProjectsApplications)
.AsBag().Inverse().Fetch.Select().BatchSize(50);
}
这有什么缺点吗,因为我看到有一个HasManyToMany语法,所以我不确定它是否对生成的查询或性能等有影响
请告知
正如您正确提到的,通常有两种方法:
- 配对对象的显式映射,生成
one-to-many
和many-to-one
- 使用
many-to-many
在不了解基础表的情况下进行隐式映射
我(我的个人陈述)几乎在任何场景中都会避免many-to-many
(而在一些非常罕见的、真正的管理对象场景中可以使用)。
以下是我的一些尝试,来解释这一点:
- 如何创建NHibernate HasManyToMany关系
- 具有额外柱的多对多nhibernate
- Nhibernate:如何用一对多关系表示多对多关系
为了在这里添加更多内容,我首先要提到,使用many-to-many
,我们将从模型中丢失配对对象。永远因此,一旦我们的客户来问:请建立我的关系Main,或者介绍排序-我们根本无法。关系就是这样。没有办法扩展它。
其次,也是最有可能的-非常有可能:我们的客户会来问:你能为我创建一个过滤器吗,只选择与Application
相关的Projects
,并将其设置为trueAnd。。。
在many-to-many
的情况下,这将是一个有点挑战性的问题。
带有显式配对对象的场景会给第三个实体带来更多开销。但可以转换为子查询
有一些Subquery
功率的例子:
- HasMany参考文献查询
- 是否可以使用NHibernate查询所有具有一个或多个可能子对象的对象
这就是我的观点。没有说这是正确的。但我的经验表明,通过显式的对对象映射,我们已经为扩展和复杂查询做好了准备。