2010-07-07 96 views
1

當我嘗試運行這段邏輯時,NHibernate返回一個錯誤,指出它沒有提及「Site」。使用NHibernate嵌套Linq查詢

IQueryable<Product> query = this.RetrieveAll();  
query = query.Where(x => x.Status == Product.Statuses.Approved || x.SiteProduct.Where(y => y.Site.ID == siteID).Count() > 0); 

有點背景。 產品具有一對多地圖SiteProduct SiteProduct具有一對多的地圖網站

即使是一個簡單的版本有它指出它沒有提及ID問題:

IQueryable<Product> query = this.RetrieveAll();  
query = query.Where(x => x.Status == Product.Statuses.Approved || x.SiteProduct.Where(y => y.ID > 0).Count() > 0); 

確實NHibernate的有問題在其內嵌入「Where」語句?

至於表映射,它們看起來是正確的,因爲我可以橫向排列並通過延遲加載捕獲底部的單個記錄。添加,獲取和刪除記錄完美無缺。我只是在嵌套我的Linq查詢時遇到問題。

+0

你使用的是什麼版本的NHibernate? – 2010-07-08 08:59:18

+0

版本2.1.2.4000 – 2010-07-08 13:01:42

回答

3

如果有人在我這裏有一個答案,這會容易很多。

我發現了什麼,通過試驗和錯誤...

顯然通過延遲加載它不會回來,加載相關的表,我引用。這導致了一個空錯誤,並沒有提及「Site」錯誤。

當我將加載從延遲加載更改爲急切加載時,出現錯誤。

因此,這個故事的寓意是,如果您試圖使用嵌套的where語句的表的引用爲null,則會出現此錯誤。