在下面的查询中,为什么我必须将相关实体包含在我的查询中以获取它们的值。我的意思是为什么懒惰加载似乎不起作用而我必须做Eager-loading?
CreatorUserId
if
条件中的HitchRequest
会抛出异常,因为如果我没有使用Include()
,city_name = row[5:].rstrip('\n')
将为空。
答案 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 Entities,Eager Loading和Eager Loading in Entity Framework