2012-02-01 81 views
0

我有以下NHibernate的代码:NHibernate的QueryOver无法查询延迟加载的对象

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(); 

然而,当它被执行,返回以下异常消息:

无法解析属性:工程的.CompletedDate: TaskManager.Framework.Model.SubProject

我一定要使用JoinQueryOver与此类似:Nhibernate Linq query to QueryOver

如果是这样,我怎么加入从子项目多个对象?

谢谢:) 添

回答

0

你会得到错误信息的原因子项目实体不加载项目相关实体。

你的说法应该是这个样子:

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。

如果您想了解更多关于连接和获取我已经replied给其他用户几个星期前。

这里是关于同一主题的一个有趣的article

+0

谢谢你,是我最终发现,加入是我是后:) – timothyclifford 2012-02-02 21:41:41

1

你可以使用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

+1 - 你的答案也适用,羞我不能标记两成正确的! – timothyclifford 2012-02-02 21:42:16