问题标签 [eager-loading]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1245 浏览

linq-to-sql - 在 Linq-To-Sql 中有效地选择树

我有一个 linq-to-sql 数据层,其中有 2 个表。“父母”和“孩子”。Child 和 Parent 之间存在关系(因此父母有很多孩子等),父母也可以有很多父母(当孩子长大并成为父母时)。

我想向用户显示这个层次结构,但我不确定如何有效地做到这一点。

低效的方法是:

但是,这会为循环中的每次迭代生成两次数据库往返(eek !!),如果它是一个大家庭,这将非常昂贵。

有没有更好的办法?(上帝,我希望如此!)

0 投票
2 回答
264 浏览

c# - 在 API 中从延迟/延迟加载转换为急切加载的首选方式?

我一直在研究一个 API(它包装了各种各样的网络服务),而且它的功能已经完成了。

我最初将这个 API 设计为始终延迟/延迟加载;考虑到使用 Web 服务固有的延迟,如果您只对可用数据的一小部分感兴趣,那么这非常有意义。但是,我没有考虑一些用例,在这些用例中,对于 API 的使用者来说,预先加载会更容易。

所以,我的问题是:你希望看到一个主要是延迟加载的 API 公开一种获取热加载版本的类的机制吗?

我倾向于explicit演员阵容,但Eager.AsEager(SomeDelayLoadingObject)如果更冗长的话,类似的东西也似乎很自然。

0 投票
1 回答
2676 浏览

ruby-on-rails - Rails 添加自定义急切加载

我在 Rails 中有许多自定义 find_by_sql 查询。我想对它们使用渴望加载,但似乎没有一个好的方法来做到这一点。

我已经看到了 eager_custom.rb 文件,它现在似乎不适用于 Rails。看起来 Rails 现在确实以不同的方式进行预加载,使用 2 个查询(常规查询加上一个查询,其中 'id IN' 来自第一个查询的 id),而不是过去使用的单连接查询。

我的问题是,如果我执行自定义 SQL 查询,然后执行 'id IN' 查询,有没有办法将关联对象添加回初始查询结果?

例如,我用 find_by_sql 加载了主题,然后我在主题 id 中找到主题 id 的主题图像,有没有办法将图像手动添加回主题?

谢谢

0 投票
1 回答
655 浏览

linq - 在没有 LoadOptions 的情况下急切加载/预取多对多-Linq to Sql

我有一种情况,我需要通过多对多关系预取一些实体。所以这就像经典的BlogPost <- BlogPostTag -> Tag情况。

是的,我知道 LoadOptions 但我不能使用它,因为它是一个 Web 应用程序,并且我使用每个请求模式的一个数据上下文。

似乎您也不能使用投影来预取多对多关系。是的?不?

我想IQueryable<Tag>根据一组博客返回。我能做的最好的就是通过执行以下操作让它返回IQueryable<IEnumerable<Tag>>

我可以把它弄平吗?我错过了一些明显的东西吗?我可以采取另一种方法吗?

不,我不能改变 ORM ;-)

0 投票
3 回答
357 浏览

asp.net-mvc - 当我不知道要加载的属性的名称时,如何进行急切加载?

我有一个通用存储库,当我使用 DoQuery 方法从数据库中选择对象时,我需要加载一些相关实体,以免在作为外键的字段的位置出现空值。

问题是存储库是通用的,所以我不知道需要加载多少属性或者它们的名称是什么(除非有某种获取它们的方法)我怎样才能使所有外键都加载它们的实体而仍然保持这个存储库通用?

这是 DoQuery 方法:

以及指向整个存储库的原始代码的链接。

我之前发布过一次,但从未得到答案,但我认为这个更相关,因为在人们假设我知道属性名称并且可以这样做之前:

.Include("PropertyNameIKnowNeedsToBeLoaded")

这是我之前发布的问题,希望能提供一些关于我在哪里的信息。

任何帮助表示赞赏。

谢谢,
马特

0 投票
2 回答
327 浏览

.net - 如何一次性在 nHibernate ICriteria 的所有关联上设置 Fetchmode?

我有一个与其他对象有很多关联的对象。所有这些都是由 nHibernate 懒惰地获取的,这在几乎所有情况下都很好。

在一个特定的场景中,在这种情况下会导出大量记录,我想将 Fetchmode 设置为对所有关联都渴望。有没有办法做到这一点,而不必手动指定每个:

我想找到但无法找到的方法:

0 投票
1 回答
1377 浏览

ruby-on-rails - 优化 Rails 急切加载查询以查找所有

在 Rails 2.3.5 应用程序中,我有以下模型:

当我打电话时

我在控制台中看到以下查询:

在 where 子句中包含所有 foo 的 id。

我想这不是一个最佳查询,而 id 的数量可能很大,我需要预加载所有的“条”。另外,实际上我没有两个模型,而是一个链。

有没有办法让急切的加载查询像

当我使用查找全部?

0 投票
2 回答
5371 浏览

ruby-on-rails - Rails 急切加载所有发现

好的,我一直在玩一些急切加载的东西,并且有 2 个模型,例如:

效果很好,当我找到一本食谱时,我急切地加载食谱,然后食谱急切地加载:recipetags:

但我还想做的是,每当我打开一个食谱时,让它自动拉入所有急切的关联——基本上我想做的是:

并让它在这种情况下也急切地加载 :recipetags 。

我意识到这似乎微不足道,但实际上我在食谱上有大约 4-5 个关联,我只是没有在这里展示它们,而不是必须在每个 find 调用中明确地执行 :include 我希望它发生. 我假设我可以覆盖 Recipe.find 以在 Recipe 模型中执行此操作,但想知道是否有更清洁的方法....

0 投票
1 回答
407 浏览

python - 在 python api 中的 GAE 数据存储预加载

我有两个与一对多相关的模型:

类问题(db.Model):

questionText = db.StringProperty(multiline=False)

类答案(db.Model):

answerText = db.StringProperty(multiline=False)

问题 = db.ReferenceProperty(问题,collection_name='answers')

我在 Flex 中实现了前端并使用 pyamf 加载数据。

当我尝试加载所有带有相关问题的答案时,所有的工作都按要求工作,我可以访问字段

回答问题

但是在加载问题的情况下(例如通过 Questions.all() ),'question.answers' 保持为空/null

(尽管在服务器/python 端我可以毫无问题地修改 question.answers - 可能在延迟加载之后)。

那么是否可以加载所有问题以及答案?

(我知道这在 JPA Java api 中是可能的,但是 python 呢?)

我应该使用其他设置、GQL 查询或 django 框架来使其工作吗?

0 投票
3 回答
4303 浏览

ruby-on-rails - 为什么这个 Rails 关联在急切加载后单独加载?

我试图避免急切加载的 N+1 查询问题,但它不起作用。相关模型仍在单独加载。

以下是相关的 ActiveRecords 及其关系:

我正在使用的查询在 Player 的这个方法中:

它与范围有关吗?这个 tableau_contains 方法在一个更大的循环中减少了几个方法调用,我最初尝试进行急切加载,因为有几个地方循环和检查这些相同的对象。然后我最终尝试了上面的代码,在循环之前加载,我仍然在日志中的 tableau_cards 循环中看到 Card 的单个 SELECT 查询。我也可以在 tableau_cards 循环之前看到带有 IN 子句的急切加载查询。

编辑:下面有更大的外循环的附加信息

EDIT2:用答案中的提示纠正了下面的循环

EDIT3:在目标循环中添加了更多细节

这是更大的循环。它在 after_save 的观察者内

这是turn类中的相关代码:

正在for player in game.players执行另一个查询以加载播放器。它被缓存了,我的意思是它在日志中有 CACHE 标签,但我认为根本不会有任何查询,因为 game.players 应该已经加载到内存中。

目标模型的另一个片段: