2012-02-01 75 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