如何在一个步骤中延迟加载子集合

时间:2012-05-10 05:32:58

标签: nhibernate fluent-nhibernate

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

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

给定一个拥有10个子集合的实体,几乎所有这些集合都将在单个操作中被访问,是否有一种方法可以在一次调用中延迟加载每个子集合,而不是让NHibernate对每个个体进行延迟加载访问子记录(例如,在foreach循环中,这就是现在正在发生的事情)。在我看来,一次性加载所有这些子集合将是一个巨大的查询,并不是非常高效。但显然这种N + 1方法是错误的。如何告诉NHibernate执行一个按需加载整个子集合的查询?这仍然给了我11个查询,但它比200更好,也许比我渴望加载所有内容时我必须做的大量查询更好。

谢谢!

1 个答案:

答案 0 :(得分:2)

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