NHibernate QueryOver не может запрашивать лениво загруженные объекты - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть следующий код NHibernate:

return NHibernateHelper.Session.QueryOver<SubProject>()
.Where
(
    sp => sp.CompletedDate == null
        && sp.ImportanceFlag.FlagID != GlobalConstants.ImportanceFlagID_Blue
        && sp.Project.SalesStatus.StatusID != GlobalConstants.SalesStatusID_NotSet
        && sp.Project.ProjectID != Guid.Empty
)
.OrderBy(sp => sp.Project.Client.CompanyName).Asc
.ThenBy(sp => sp.Project.ProjectName).Asc
.ThenBy(sp => sp.SubProjectName).Asc
.List();

Однако, когда он выполняется, возвращает следующее сообщение об исключении:

не удалось разрешить свойство: Project.CompletedDate of: TaskManager.Framework.Model.SubProject

Должен ли я использовать JoinQueryOver, похожий на этот: Запрос Nhibernate Linq к QueryOver

И если да, то как мне объединить несколько объектов из SubProject?

Спасибо :) Тим

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Вы можете использовать LINQ для этого запроса вместо QueryOver (фактически, выбранные вами теги предполагают, что это именно то, что вы на самом деле хотели):

return NHibernateHelper.Session.Query<SubProject>()
.Where
(
    sp => sp.CompletedDate == null
        && sp.ImportanceFlag.FlagID != GlobalConstants.ImportanceFlagID_Blue
        && sp.Project.SalesStatus.StatusID != GlobalConstants.SalesStatusID_NotSet
        && sp.Project.ProjectID != Guid.Empty
)
.OrderBy(sp => sp.Project.Client.CompanyName)
.ThenBy(sp => sp.Project.ProjectName)
.ThenBy(sp => sp.SubProjectName)
.ToList();
0 голосов
/ 01 февраля 2012

вы получаете это сообщение об ошибке: Подпроект объект не загружается Проект связанный объект.

Ваш оператор должен выглядеть примерно так:

Project project = null;

return NHibernateHelper.Session.QueryOver<SubProject>()
.Where
(
    sp => sp.CompletedDate == null
        && sp.ImportanceFlag.FlagID != GlobalConstants.ImportanceFlagID_Blue
)
.Inner.JoinAlias(sp => sp.Project, () => project)
.And(()=> project.SalesStatus.StatusID != GlobalConstants.SalesStatusID_NotSet
        && project.ProjectID != Guid.Empty
    )
.OrderBy(() => project.Client.CompanyName).Asc
.ThenBy(() => project.ProjectName).Asc
.ThenBy(sp => sp.SubProjectName).Asc
.List();

Я не уверен насчет отношений между Проектом и Клиентом, но я полагаю, что у Проекта всегда есть связанный Клиент, и поэтому он должен быть много-к-одному с fetch-join.

Если вы хотитечтобы узнать больше о соединениях и загрузке, я ответил другому пользователю несколько недель назад.

А вот интересная статья на ту же тему.

...