У меня есть класс с картой ReferencesAny. Для определенных запросов я получаю ситуацию 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](.Where[wp.cms.DomainModel.Entity.Structure.PagePathMemento] (NHibernate.Linq.NhQueryable`1[wp.cms.DomainModel.Entity.Structure.PagePathMemento], Quote((p, ) => (.Any[wp.cms.DomainModel.Entity.Users.UserSite](p.Site .Users, (u, ) => (Guid.op_Equality(u.User.Id, p1)), ))), ), Quote((p, ) => (p.Page)), )] Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: 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], Quote((p, ) => (.Any[wp.cms .DomainModel.Entity.Users.UserSite](p.Site.Users, (u, ) => (Guid.op_Equality(u.User.Id, p1)), ))), ), Quote((p, ) = > (стр.)), )]