2013-03-21 41 views
1

我試圖理解爲什麼這個簡單的查詢生成NHibernate的3.3錯SQL:NHibernate的查詢失敗「的多部分組成的標識符無法綁定」在彙總查詢

var query = session.CreateQuery(@"select count(*) as C 
            from Parent p 
             inner join fetch p.Child c 
            where c.Field = 'someValue'"); 

當我執行此查詢生成的SQL不包括對Child表的引用,這會導致可怕的「多部分標識_child.FIELD無法綁定」異常。

任何人有一個想法,爲什麼這個問題以及如何解決它?

謝謝!

回答

0

僅供參考,如果別人獲得此燒燬。

NHibernate的內部似乎在生成查詢時過濾出連接。

所以,我們發現的唯一的解決辦法是改寫查詢是這樣的:

select count(*) as C 
from Parent p 
where p.Child.Field = 'someValue' 

這樣,NHibernate的是要產生聯接語法(使用交叉連接運算符和WHERE子句)。

0

count(*)指定一個不同的別名,因爲您使用cC作爲別名,可能nhibernate會感到困惑。

舉例來說,你可以設置你這樣的查詢

var query = session.CreateQuery(@"select count(*) as co 
           from Parent p 
            inner join fetch p.Child c 
           where c.Field = 'someValue'"); 
+0

不幸的是,這不是問題所在。生成的sql如下所示:「SELECT COUNT(*)as C FROM PARENT _PARENT WHERE _CHILD.NAME ='Some Value'」 - 這顯然是錯誤的。 – 2013-03-21 15:51:42

+0

@ A.Chiesa:查詢看起來很直截了當。你有沒有試過將'count(*)作爲C'來僅僅用於測試目的?只是爲了檢查是否仍然存在錯誤 – 2013-03-21 16:10:10

+0

是的。與EXACT相同的選擇和where子句完美無缺地工作。感謝您的關注! – 2013-03-21 16:12:43

相關問題