NHibernate ReferencesAny Fetching?

时间:2012-02-08 18:47:17

标签: nhibernate fluent-nhibernate fetch

我有一个带有ReferencesAny地图的课程。对于某些查询,我最终在Any Map上出现N + 1情况。有没有办法将Fetch用于任何地图?

这是我的linq查询的样子(这样可行,但由于N + 1而导致性能不佳):

return Session.Query<Path>().Where(p => {condition}).ToArray().Select(p => p.ContentsObject);

当我在混音中添加一个提取时:

return Session.Query<Path>().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](。[wp.cms.DomainModel.Entity.Structure] .PagePathMemento](NHibernate.Linq.NhQueryable`1 [wp.cms.DomainModel.Entity.Structure.PagePathMemento],引用((p,)=&gt;(。任何[wp.cms.DomainModel.Entity.Users.UserSite] (p.Site.Users,(u,)=&gt;(Guid.op_Equality(u.User.Id,p1)),))),),Quote((p,)=&gt;(p.Page)) ,)] 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:NHibernate.Hql.Ast.ANTLR.InvalidPathException:无效的连接:p.Page [.Fetch [wp.cms.DomainModel.Entity.Structure.PagePathMemento,wp.cms.DomainModel.Entity.Base.ILocatablePage] (。[wp.cms.DomainModel.Entity.Structure.PagePathMemento](NHibernate.Linq.NhQueryable`1 [wp.cms.DomainModel.Entity.Structure.PagePathMemento],引用((p,)=&gt;(。任何人) [wp.cms.DomainModel.Entity.Users.UserSite](p.Site.Users,(u,)=&gt;(Guid.op_Equality(u.User.Id,p1)),))),),引用( (p,)=&gt;(p.Page)),)]

1 个答案:

答案 0 :(得分:4)

我认为不可能急于加载any映射。

要避免使用N + 1,请在您的实体上设置合理的batch-size(例如,20或50)

请参阅19.1.5 Using batch fetching