首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate :加载整个图(集合集合的集合)

NHibernate :加载整个图(集合集合的集合)
EN

Stack Overflow用户
提问于 2012-01-27 17:39:07
回答 1查看 400关注 0票数 0

我需要(出于一个很好的理由,相信我)使用NHibernate加载我的数据库的几乎整个图表。没有那么多实体,但是这个图有点复杂。

我的图表看起来像是:

  • EntityA
  • |
  • --> EntityB
  • |
  • -->列表
    • |
    • --> EntityD
    • |
    • --> List
      • |
      • --> EntityF

好吧..。你明白了吧。

我希望用尽可能少的查询和往返来加载所有这些信息,而且可能根本没有选择的N+1。另外,我想把它保持为一个图,这样以后我就可以很容易地遍历它。

我最好的选择是什么?NHibernateUtil.Initialize()?获取()/FetchMany()?未来/多重查询?

我有点迷路了,但我想我得做多个手术了。但是什么才是最有效的呢?

还有:所有实体都有一个IsPublished属性。我希望能够加载所有实体或仅那些已发布的实体。

编辑

最后,我尝试了这个:

代码语言:javascript
复制
var applicationFields = NHibernateSession.Current.Query<ApplicationField>().Where(af => af.Ispublished)
.FetchMany(af => af.Illustrations)
.ThenFetch(i => i.InteractiveConfiguration)
.ThenFetchMany(ic => ic.UniqueSellingPoints)
.ThenFetchMany(usp => usp.Pictures)
.ToList();

考虑到我的图表的样子,我认为它是很好的。而且,我没有同一水平的多个集合,据我所知,这就是导致笛卡儿产品的原因。

对于那些提出要求的人来说,这不是一个递归问题。否则,我将使用Server。另外,我没有更新任何实体,它只是普通阅读(用于脱机应用程序)。

但我对我的“奖金”问题一无所知。我知道EF可以基于过滤器加载部分集合,但是使用NH似乎是不可能的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-30 09:01:50

简短的回答:根据usecase和预期的列表大小,Fetch()、/FetchMany()和Future()的组合

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9037589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档