C# 在使用fluent nhibernate时,我是否犯了多对多错误?

C# 在使用fluent nhibernate时,我是否犯了多对多错误?,c#,nhibernate,fluent-nhibernate,many-to-many,C#,Nhibernate,Fluent Nhibernate,Many To Many,我有两个主要实体(db表) 项目 应用程序 我有一个名为ProjectApplication的桥接表,有3列(Id、ProjectId、ApplicationId) 一个项目可以有许多应用程序。 一个应用程序可以应用于许多不同的项目 您的基本多对多映射 目前,这是我在fluent nhibernate映射文件中设置的内容 public class ProjectMap { HasMany(x => x.ProjectApplications) .AsBag(

我有两个主要实体(db表)

  • 项目
  • 应用程序
  • 我有一个名为ProjectApplication的桥接表,有3列(Id、ProjectId、ApplicationId)

    一个项目可以有许多应用程序。 一个应用程序可以应用于许多不同的项目

    您的基本多对多映射

    目前,这是我在fluent 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);
    
     }
    
    我看到有一种hasmanytomy语法,因此我不确定它是否会对生成的查询或性能等产生影响,这有什么不利之处吗


    请告知

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

    • 配对对象的显式映射,导致
      一对多
      多对一
    • 使用
      多对多
    我(我的个人声明)在几乎任何场景中都会避免
    many-to-many
    (而在一些非常罕见的情况下,可以使用真正的管理对象场景)

    以下是我的一些尝试,以解释:

    要在这里添加更多内容,我首先要提到的是,使用
    many-To-many
    我们将从模型中失去配对对象。永远。因此,一旦我们的客户来问:请做一个我的关系Main,或者介绍排序——我们根本不能。关系就是这样。没有办法扩展它

    其次,也是最有可能的——很有可能:我们的客户会来问:您能为我创建一个过滤器吗?只选择与
    应用程序相关的
    项目
    ,将某些设置设置为true,然后

    多对多
    的情况下,这将有点挑战性

    带有显式配对对象的场景会给第三个实体带来更多开销。但可以转换为子查询

    下面是
    子查询
    电源的一些示例:


    这是我的观点。不说它是正确的。但我的经验表明,通过显式对象对映射,我们可以进行扩展,也可以进行复杂查询。

    我确实支持这种解决方案。我喜欢。因为它的“正面”是用于子查询的!好决定;)@RadimKöhler你能解释一下我怎样才能用这种方法获得更好的性能吗?