为什么我必须在Linq查询中包含其他实体?

时间:2018-03-14 04:22:27

标签: entity-framework asp.net-core lazy-loading aspnetboilerplate ef-core-2.0

在下面的查询中,为什么我必须将相关实体包含在我的查询中以获取它们的值。我的意思是为什么懒惰加载似乎不起作用而我必须做Eager-loading?

CreatorUserId

if条件中的HitchRequest会抛出异常,因为如果我没有使用Include()city_name = row[5:].rstrip('\n')将为空。

1 个答案:

答案 0 :(得分:0)

Inclue()方法提供了预先加载而不是延迟加载。我根据我的知识向你解释两者之间的差异。

  • 延迟加载。它仅为您提供实体本身的记录,每次为相关数据(在您的情况下为HitchRequest)提供一个记录 必须检索该实体。 DbContext课让你懒惰 默认加载。

  • 急切加载。当读取实体时,会同时检索相关数据。这通常会导致单个连接查询 检索所需的所有数据。您可以指定预先加载 使用Include方法。

没有Include()的第一个语句等同于以下语句,如果您不使用HitchRequest,那么Include()为空的原因为:

SELECT * FROM AcceptedRequest;

使用Include("HitchRequest.User")的声明等同于以下声明:

SELECT * FROM AcceptedRequest JOIN Orders ON AcceptedRequest.Id = HitchRequest.User.AcceptedRequestId;

您可以参考this非常有用的文章。

Entity Framework Loading Related EntitiesEager LoadingEager Loading in Entity Framework