NHibernate Linq 提供程序中的 Fetch 与 FetchMany

Posted

技术标签:

【中文标题】NHibernate Linq 提供程序中的 Fetch 与 FetchMany【英文标题】:Fetch vs FetchMany in NHibernate Linq provider 【发布时间】:2011-05-22 15:15:37 【问题描述】:

可以使用 FetchFetchMany 完成 NHibernate 急切加载,如 Mike Hadlow 博客上的 NHibernate Linq Eager Fetching 所述。

这两种方法有什么区别,分别在什么情况下使用?

【问题讨论】:

【参考方案1】:

Fetch 应该用于引用,FetchMany 应该用于集合。

这一点尤其重要,因为只有 FetchMany 可以与 ThenFetchMany 组合来获取“孙子”集合。

例子:

session.Query<User>()
       .FetchMany(u => u.Orders)
       .ThenFetchMany(o => o.OrderItems)

【讨论】:

如果您以后不打算调用 ThenFetch(),对集合使用 Fetch() 会不会有问题? @Diego Mijelshon 因为 Fetch 和 FetchMany 都有效,有什么区别? @hardywang:可以将它们链接起来以获取更多关卡的方式。只需查看方法签名。

以上是关于NHibernate Linq 提供程序中的 Fetch 与 FetchMany的主要内容,如果未能解决你的问题,请参考以下文章

我在哪里可以获得用于 NHibernate 的 Linq?

将 Linq 中的 NHibernate 应用程序重写为 SQL

NHibernate 3 LINQ:如何过滤 IQueryable 以仅选择 T 类及其子类的对象?

用于 NHibernate 的 Linq 和预加载的 fetch 模式

NHibernate3剖析:Query篇之NHibernate.Linq增强查询

如何在 Hql 中执行 ThenFetch 以及如何分解 nhibernate linq 中的许多连接?