在研究Include
和Join
之间的差异时,我发现:
如果数据库不包含外键,那么最好使用Join
,因为-it没有导航道具
如果它确实有导航道具,那就使用Include
。(它还可以保存数据库命中。)
但是有一个引起了我的注意:
Include是作为联接实现的。根据所包含链接的可空性,它是内部或左连接。
问题:
空性如何影响左/内连接?
在Sql server中,我可以有一个Cities
表和Persons
表,一个人可以有一个NULL
CityID
。
为什么要由实体框架来决定它是哪种连接?
编辑:可视化:
现在让我们将CityId更改为not null:
变化是这样的:
发布于 2013-09-15 15:18:19
假设在您的类中有一个关于City或CityID的[Required]
约束。假设存在没有(有效) City的Person记录。满足[Required]
的唯一方法是执行内部联接。
但只要你的数据库和模型中的约束匹配(即CityID INT NOT NULL
),使用哪种类型的连接就无关紧要了。这应该是正常的情况。
如果没有约束,你当然会期望一个左连接。
发布于 2017-10-10 01:22:12
我知道这是一个老问题,但是如果其他人像我一样使用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);
}
被转换为左外部联接,而
modelBuilder.Entity<Parent>()
.HasRequired(a => a.Child) /* INNER JOIN */
.WithMany()
.HasForeignKey(a => a.ChildId);
被转换为内部联接。
https://stackoverflow.com/questions/18809817
复制相似问题