我如何懒惰/渴望动态加载nhibernate

时间:2011-08-08 15:51:33

标签: nhibernate

有没有办法在加载时动态设置两个实体之间的加载策略?

例如,如果我有一个Parent实体,其中包含Child个实体的列表,我可能希望在某些情况下加载具有延迟加载子项的“父”实体,并在其他情况下加载急切加载。

有办法做到这一点吗?映射似乎意味着它的一个或另一个。

1 个答案:

答案 0 :(得分:8)

是的,建议的策略是默认您的实体使用延迟加载,然后当您想要加载它们时,您需要更改查询并指定您希望您的孩子被急切加载。

至于如何实际实现预先加载,它取决于您正在使用的查询样式。 (即Linq2NH,Criteria,HQL)

例如,对于Linq2NH,我相信它是这样的:

session.Query<Parent>().Fetch(p => p.Child)...

使用HQL,您可以使用

  

像这样:

from Parent as p left join fetch p.Child...

最后,使用Criteria API,您可以执行以下操作:

var criteria = context.Session.CreateCriteria<Parent>();
criteria.SetFetchMode("Child", NHibernate.FetchMode.Eager);
....