【问题标题】:How to make eager loading?如何进行急切加载?
【发布时间】:2017-04-23 13:19:51
【问题描述】:

如何在 1 个主键表和 2 个外键表之间进行预加载?

假设我有表 A(主要)

表 A 标识 INT 名称

表 B 标识 INT 帮助情报

表 C 标识 INT 帮助情报

【问题讨论】:

  • 什么是数据库查询上下文中的“急切加载”?只需让数据库处理数据即可。
  • @GordonLinoff 这是一个实体框架的东西。 ORM 是否预先或在需要时检索相关实体的数据。
  • 这里有很多关于EF eager vs lazy loading 的介绍性内容,但是您的代码示例暗示您正在尝试执行 SQL,这非常不同。
  • Context.A.Include(Function(a) a.B).Include(Function(a) a.C).ToList()

标签: sql-server vb.net entity-framework linq-to-entities eager-loading


【解决方案1】:

评论太长了。

我认为您需要做的就是对所有表编写一个单个查询:

select . ..
from a join
     b
     on b.aid = a.id join
     c
     on c.aid = a.id;

然后,数据库引擎管理存储,并可以智能地将页面加载到页面缓存中并保持缓存以供将来查询。

如果您尝试将其拆分为多个查询,那么我看不到a 上的一个查询会导致b 的相应行被加载。另一方面,桌子有多大?如果它们不是很大,这些表将完全加载到页面缓存中,您不必担心单个行。

一个问题是初始查询将在冷缓存上,并且比后续查询花费更长的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2013-04-28
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    相关资源
    最近更新 更多