首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实体框架包含命令-左连接还是内连接?

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

Stack Overflow用户
提问于 2013-09-15 15:04:43
回答 2查看 23.7K关注 0票数 32

在研究IncludeJoin之间的差异时,我发现:

如果数据库不包含外键,那么最好使用Join,因为-it没有导航道具

如果它确实有导航道具,那就使用Include。(它还可以保存数据库命中。)

但是有一个引起了我的注意:

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

问题:

空性如何影响左/内连接?

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

为什么要由实体框架来决定它是哪种连接?

编辑:可视化:

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

变化是这样的:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-15 15:18:19

假设在您的类中有一个关于City或CityID的[Required]约束。假设存在没有(有效) City的Person记录。满足[Required]的唯一方法是执行内部联接。

但只要你的数据库和模型中的约束匹配(即CityID INT NOT NULL),使用哪种类型的连接就无关紧要了。这应该是正常的情况。

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

票数 15
EN

Stack Overflow用户

发布于 2017-10-10 01:22:12

我知道这是一个老问题,但是如果其他人像我一样使用EF Code First,我的问题是流畅的映射:

代码语言:javascript
复制
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

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

被转换为左外部联接,而

代码语言:javascript
复制
    modelBuilder.Entity<Parent>()
        .HasRequired(a => a.Child) /* INNER JOIN */
        .WithMany()
        .HasForeignKey(a => a.ChildId);

被转换为内部联接

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18809817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档