nHibernate Eager在运行时加载

时间:2012-07-10 19:38:12

标签: nhibernate fluent-nhibernate ncommon

我们正在使用NCommon的UnitOfWorkScope来包装nHibernate ISession功能。我们的目标是按需加载复杂的属性,而不是通过配置急切地加载它们。这个想法是,检索实体的给定服务可以通过调用代码进行一些定制 - 有时我们只希望父实体被水合,有时我们也可能希望复杂的子属性也是水合的。

为实现这一目标,我们正在做以下事情:

  var iSession = unitOfWorkScope.CurrentUnitOfWork<NHUnitOfWork>().GetSession<ParentEntity>();

  iSession.CreateCriteria<ParentEntity>().SetFetchMode("Children", FetchMode.Eager);

在会话上设置完成后,我们使用NCommon的IRepository功能来检索实体:

  var parent = parentRepository.FirstOrDefault(x => x.Id == 123);

但是,当我们检查parent.Children集合时,我们得到:

  NHibernate.Collection.Generic.PersistentGenericBag<ChildEntity>

...告诉我没有发生过急切加载。当我们修改NH映射以始终强制加载时,我们会正确地看到子映射。

任何人都可以对此有所了解吗?我假设我们遗漏了一些东西,因为忽略了FetchMode.Eager。

1 个答案:

答案 0 :(得分:0)