C# Nhibernate处理集合上的Linq属性是否在应用where子句之前加载?不可质疑?

C# Nhibernate处理集合上的Linq属性是否在应用where子句之前加载?不可质疑?,c#,entity-framework,nhibernate,lazy-loading,iqueryable,C#,Entity Framework,Nhibernate,Lazy Loading,Iqueryable,不久前开始使用NHibernate。使用EF多年 据我所知,懒散加载只是在需要时加载必要的数据。在调用ToList()或类似的调用之前,集合应保持为可查询状态 然而,当我在linq查询中使用collection属性时,才发现nhibernate实际上是在将查询添加到顶部之前以列表的形式加载完整的集合 例如: User.Items.Count() Nhibernate在盘点前加载完整项目列表。 据我所知,EF只会调用数据库进行计数,而不会调用完整的项目列表 有人能解释一下原因吗?以及如何保持集合属

不久前开始使用NHibernate。使用EF多年

据我所知,懒散加载只是在需要时加载必要的数据。在调用ToList()或类似的调用之前,集合应保持为可查询状态

然而,当我在linq查询中使用collection属性时,才发现nhibernate实际上是在将查询添加到顶部之前以列表的形式加载完整的集合

例如: User.Items.Count()

Nhibernate在盘点前加载完整项目列表。 据我所知,EF只会调用数据库进行计数,而不会调用完整的项目列表

有人能解释一下原因吗?以及如何保持集合属性在需要之前是可查询的


非常感谢

NHibernate加载完整集合,因为它支持集合的不同级联选项


您将无法将
bag
set
存储为可查询,以便以后执行SQL。您可以做的唯一优化是设置
lazy=“extra”
,它将把您的计数、包含的查询转换为适当的SQL,而不是LINQ。

遗憾的是,Nhibernate不支持可查询的延迟加载。。。谢谢你的回复。