我有以下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: TaskManager.Framework.Model.SubProject
我是否必须使用与此类似的JoinQueryOver:Nhibernate Linq query to QueryOver
如果是这样,我如何从SubProject加入多个对象?
谢谢:) 添
答案 0 :(得分: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();
答案 1 :(得分: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();
我不确定Project和Client之间的关系,但我猜一个Project总是一个关联的客户端,所以它应该是一个多对一的fetch-join。
如果您想在几周前了解更多关于加入和提取我replied给其他用户的信息。
这是关于同一主题的有趣article。