entity framework包含命令 – 左连接还是内连接?
在我调查Include
和Join
之间的区别时,我发现:
如果数据库不包含外键 – 它没有导航道具,所以最好使用Join
如果它确实有导航道具 – 那么使用Include
。 (它还可以节省数据库命中率。)
但这里的一个答案引起了我的注意:
Include实现为连接。 根据所包含链接的可为空性 ,它是内部或左侧连接。
题 :
无效如何影响左/内连接?
在Sql server中我可以有一个Cities
表和Persons
表,一个人可以有一个NULL
CityID
。
为什么entity framework会为我决定它是什么类型的连接?
编辑:可视化:
现在让我们将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() .HasOptional(a => a.Child) /* LEFT OUTER JOIN */ .WithMany() .HasForeignKey(a => a.ChildId); }
被翻译为LEFT OUTER JOIN而
modelBuilder.Entity() .HasRequired(a => a.Child) /* INNER JOIN */ .WithMany() .HasForeignKey(a => a.ChildId);
被翻译为INNER JOIN 。