NHibernate引用任何抓取?

NHibernate引用任何抓取?,nhibernate,fluent-nhibernate,fetch,Nhibernate,Fluent Nhibernate,Fetch,我有一个带有ReferencesAny映射的类。对于某些查询,我在任意地图上都会出现N+1的情况。有没有一种方法可以使用Fetch获取任意地图 以下是我的linq查询的样子(这是可行的,但由于N+1,性能很差): return Session.Query().Where(p=>{condition}).ToArray().Select(p=>p.ContentsObject); 当我在混音中添加回音时: return Session.Query<Path>().Where(p =&

我有一个带有ReferencesAny映射的类。对于某些查询,我在任意地图上都会出现N+1的情况。有没有一种方法可以使用Fetch获取任意地图

以下是我的linq查询的样子(这是可行的,但由于N+1,性能很差):

return Session.Query().Where(p=>{condition}).ToArray().Select(p=>p.ContentsObject);
当我在混音中添加回音时:

return Session.Query<Path>().Where(p => {condition}).Fetch(p => p.ContentsObject).Select(p => p.ContentsObject);
return Session.Query().Where(p=>{condition}).Fetch(p=>p.ContentsObject).Select(p=>p.ContentsObject);
查询结束时表示存在无效联接

例外情况:

无效的联接:p.Page[.Fetch[wp.cms.DomainModel.Entity.Structure.PagePathMemento,wp.cms.DomainModel.Entity.Base.ILocatablePage](.Where[wp.cms.DomainModel.Entity.Structure.PagePathMemento](NHibernate.Linq.NhQueryable`1[wp.cms.DomainModel.Entity.Structure.PagePathMemento]),引号((p,)=>(.Any[wp.cms.DomainModel.Entity.Users.Users.UserSite](p.Site.Users,(u,)=>(Guid.op_Equality(u.User.Id,p1)),)引用((p,)=>(p.Page)),)] 描述:在执行当前web请求期间发生未经处理的异常。请查看堆栈跟踪,以了解有关错误及其在代码中起源的详细信息


异常详细信息:NHibernate.Hql.Ast.ANTLR.InvalidPathException:无效联接:p.Page[.Fetch[wp.cms.DomainModel.Entity.Structure.PagePathMemento,wp.cms.DomainModel.Entity.Base.ILocatablePage](.Where[wp.cms.DomainModel.Entity.Structure.PagePathMemento](NHibernate.Linq.NhQueryable`1[wp.cms.DomainModel.Entity.Structure.PagePathMemento]),引号((p,)=>(.Any[wp.cms.DomainModel.Entity.Users.UserSite](p.Site.Users,(u,)=>(Guid.op_Equality(u.User.Id,p1)),),),Quote((p,)=>(p.Page)),)

我认为不可能急于加载
任何
映射

为避免N+1,在实体上设置合理的
批量大小
(例如,20或50)


请参见

我认为不可能立即加载任何
映射

为避免N+1,在实体上设置合理的
批量大小
(例如,20或50)


请参见

显示完整异常+内部异常消息。显示完整异常+内部异常消息。由于某些原因,它不允许我设置批处理大小。当我尝试Session.SetBatchSize(50)时,它会给我错误:“没有为会话工厂定义批处理大小,批处理被禁用。设置adonet.batch\u size=1以启用批处理。”我正在使用NH GuidComb密钥生成器,我已经在配置中设置了batch size属性。有什么想法吗?这不是我所指的批次大小。现在我明白了。非常感谢!这是一个很大的帮助。出于某种原因,它不允许我设置批次大小。当我尝试Session.SetBatchSize(50)时,它会给我错误:“没有为会话工厂定义批大小,批处理被禁用。请设置adonet.batch_size=1以启用批处理。”我正在使用NH GuidComb密钥生成器,并在配置中设置了批大小属性。有什么想法吗?这不是我所指的批大小。现在我明白了。非常感谢!这是一个很大的帮助。
return Session.Query<Path>().Where(p => {condition}).Fetch(p => p.ContentsObject).Select(p => p.ContentsObject);