使用流利的nhibernate时,我做错了很多次吗?

时间:2014-04-11 14:34:31

标签: c# nhibernate fluent-nhibernate many-to-many

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

  1. 项目
  2. 应用
  3. 我有一个名为 ProjectApplication 的桥接表,带有3列(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 语法,所以我不确定它是否会对生成的查询或性能等产生影响

    请告知

1 个答案:

答案 0 :(得分:1)

一般来说,有两种方法,正如您所正确提到的那样:

  • 配对对象的显式映射,产生one-to-manymany-to-one
  • 使用many-to-many
  • 在不了解基础表的情况下进行隐式映射

(我的个人陈述)几乎在任何情况下都会避免many-to-many (在某些非常罕见的情况下,可以使用真正的管理对象方案)

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

要在此处添加更多内容,我首先要提到的是,对于many-to-many,我们正在丢失模型中的配对对象。永远。所以,一旦我们的客户来问问:请,我的关系之一主要,或者介绍排序 - 我们根本不能。这种关系就是这样。无法如何扩展它。

其次,很有可能 - 很可能:我们的客户会来问:您能否为我创建一个过滤器,只选择与{{1}相关的Projects将某些设置设置为 true AND ...

Application案例中,这会有点挑战。

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

有一些many-to-many权力的例子:

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