0

我们正在使用 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 被忽略了。

4

1 回答 1

0

这是解决方案,在这里找到:

http://slynetblog.blogspot.com/2011/11/in-spite-of-common-now-approach-of.html

于 2012-07-11T03:17:36.140 回答