NHibernate Linq 提供程序中的 Fetch 与 FetchMany
Posted
技术标签:
【中文标题】NHibernate Linq 提供程序中的 Fetch 与 FetchMany【英文标题】:Fetch vs FetchMany in NHibernate Linq provider 【发布时间】:2011-05-22 15:15:37 【问题描述】:可以使用 Fetch
和 FetchMany
完成 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的主要内容,如果未能解决你的问题,请参考以下文章
将 Linq 中的 NHibernate 应用程序重写为 SQL
NHibernate 3 LINQ:如何过滤 IQueryable 以仅选择 T 类及其子类的对象?
用于 NHibernate 的 Linq 和预加载的 fetch 模式