1

我正在开发一个使用 NHibernate 的遗留应用程序,而没有任何明显的效率考虑。我目前正在逐步执行一种方法,到目前为止,该方法已执行了 200 多个查询。这主要是由于 N+1 问题。

无论如何,当我考虑解决这个问题时,我的问题是:

给定一个实体,比如说,有 10 个子集合,几乎所有这些子集合都将在一次操作中被访问,有没有办法在一次调用中延迟加载每个子集合,而不是让 NHibernate 延迟加载每个单独的子记录它被访问(例如,在一个 foreach 循环中,这就是现在正在发生的事情)。在我看来,一次急切地加载所有这些子集合将是一个庞大的查询,而且性能不是很好。但显然这种 N+1 方法是错误的。我如何告诉 NHibernate 执行一个按需加载整个子集合的查询?这仍然给了我 11 个查询,但它比 200 个要好,也许比我急切加载所有内容时必须做的大量查询要好。

谢谢!

4

1 回答 1

2

您可以使用 NHibernateUtil.Initialize(yourObject.ChildCollection) 方法。此方法强制代理根据您在映射中设置的获取策略加载其数据。资料来源:NHibernate 文档

于 2012-05-16T16:06:48.300 回答