在使用流利的nhibernate时,我是否做了很多对很多的错误操作

本文关键字:操作 错误 是否 nhibernate | 更新日期: 2023-09-27 17:57:59

我有两个主要实体(数据库表)

  1. 项目
  2. 应用程序

我有一个名为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语法,所以我不确定它是否对生成的查询或性能等有影响

请告知

在使用流利的nhibernate时,我是否做了很多对很多的错误操作

正如您正确提到的,通常有两种方法:

  • 配对对象的显式映射,生成one-to-manymany-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查询所有具有一个或多个可能子对象的对象

这就是我的观点。没有说这是正确的。但我的经验表明,通过显式的对对象映射,我们已经为扩展和复杂查询做好了准备。