我们正在使用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。
答案 0 :(得分:0)