如何使用nhibernate动态加载惰性/急切性

如何使用nhibernate动态加载惰性/急切性,nhibernate,Nhibernate,是否有一种在加载时在两个实体之间动态设置加载策略的方法 例如,如果我有一个父实体,它有一个子实体的列表,我可能希望在某些情况下加载“父”实体,其中包含惰性加载的子实体,而在其他情况下则包含急切加载的子实体 有办法做到这一点吗?映射似乎暗示了它的一个或另一个。是的,建议的策略是默认您的实体使用延迟加载,然后当您想要急切地加载它们时,更改查询并指定您想要急切地加载您的子实体 至于您实际如何实现渴望加载,这取决于您使用的查询样式。(即Linq2NH、标准、HQL) 例如,对于Linq2NH,我相信是这

是否有一种在加载时在两个实体之间动态设置加载策略的方法

例如,如果我有一个
实体,它有一个
实体的列表,我可能希望在某些情况下加载“父”实体,其中包含惰性加载的子实体,而在其他情况下则包含急切加载的子实体


有办法做到这一点吗?映射似乎暗示了它的一个或另一个。

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

至于您实际如何实现渴望加载,这取决于您使用的查询样式。(即Linq2NH、标准、HQL)

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

session.Query<Parent>().Fetch(p => p.Child)...
var criteria = context.Session.CreateCriteria<Parent>();
criteria.SetFetchMode("Child", NHibernate.FetchMode.Eager);
....
最后,使用Criteria API,您可以执行以下操作:

session.Query<Parent>().Fetch(p => p.Child)...
var criteria = context.Session.CreateCriteria<Parent>();
criteria.SetFetchMode("Child", NHibernate.FetchMode.Eager);
....
var-criteria=context.Session.CreateCriteria();
criteria.SetFetchMode(“Child”,NHibernate.FetchMode.Eager);
....