繁体   English   中英

实体框架包含命令 - 左连接还是内连接?

[英]Entity framework Include command - Left or inner join?

在我调查IncludeJoin之间的区别时,我发现:

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

如果它确实有导航道具 - 那么使用Include (它还可以节省数据库命中率。)

这里的一个答案引起了我的注意:

Include实现为连接。 根据所包含链接的可为空性 ,它是内部左侧连接。

题 :

无效如何影响左/内连接?

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

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

编辑:可视化:

在此输入图像描述

在此输入图像描述

现在让我们将CityId更改为null:

在此输入图像描述

这是改变:

在此输入图像描述

假设在您的课程中,City或CityID上有[Required]约束。 并且假设没有(有效)城市的人员记录。 满足[Required]的唯一方法是执行内连接。

但是只要你的Db和模型中的约束匹配(即CityID INT NOT NULL ),使用何种类型的Join就不重要了。 这应该是正常情况。

没有约束,你当然会期望一个左连接。

我知道这是一个老问题,但如果有人像我一样使用EF Code First登陆这里,我的问题在于流畅的映射:

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

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

被翻译为LEFT OUTER JOIN

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

被翻译为INNER JOIN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM