实体框架包括命令左或内连接?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

当我调查之间的差异时IncludeJoin我发现:

如果数据库包含外键 - 它没有导航道具,所以最好使用Join

如果它确实有一个导航的道具-再使用Include。(这也节省了数据库命中。)

包含被实现为连接。根据包含的链接的可空性,它是一个内连接连接。

题 :

nullity如何影响左/内连接?

在Sql服务器中,我可以有一个Cities表和一个Persons表,一个人可以有一个表NULL CityID

为什么实体框架为我决定它是什么样的连接?

提问于
用户回答回答于

假设在你的项目里有一个[Required]City或CityID 的限制。假设没有(有效)城市的人员记录。满足的唯一方法[Required]是执行内部连接。

但只要你的Db和模型中的约束匹配(即CityID INT NOT NULL),使用什么类型的连接并不重要。这应该是正常情况。

用户回答回答于

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Parent>()
            .HasOptional(a => a.Child) /* LEFT OUTER JOIN */
            .WithMany()
            .HasForeignKey(a => a.ChildId);
    }

被翻译为一个左外部连接,

    modelBuilder.Entity<Parent>()
        .HasRequired(a => a.Child) /* INNER JOIN */
        .WithMany()
        .HasForeignKey(a => a.ChildId);

被翻译成INNER JOIN

扫码关注云+社区