2012-01-15 90 views
1

最近,我們更新了我們的nHibernate到3.2。 現在,我們添加了兩個新選項來編寫查詢 - 查詢(LINQ)或QueryOver(iCriteria)。Nhibernate 3.2查詢與QueryOver

從我讀,QueryOver致力於爲NHibernate和功能更強大的複雜 查詢。另一方面,LINQ是普遍的,如果明天我改變我的ORM,我的查詢就會保持爲 。我使用LINQ的另一個重要原因是,在LINQ上我發現了更多的文檔 和示例,而不是QueryOver。

其實,我更喜歡使用LINQ,我想肯定是沒有關鍵的原因,爲什麼我不應該這樣做。

由於提前,

+2

您不必在Linq和QueryOver之間進行選擇。您可以使用任何一種最適合任何情況的工具。儘管不同的ORM在支持Linq方面存在一些重疊,但它們支持什麼以及它們在哪裏存在缺陷也存在差異。我個人發現QueryOver非常容易使用,而不需要太多的文檔。 – 2012-01-15 12:07:31

回答

2

至於現在,不幸都有其侷限性,還有大量的工作要由NHibernate的團隊來完成,以配合LINQ2SQL的表現,大多數查詢只是工作。

大部分時間我使用Linq(Query),但它具有涉及分組在相對簡單的查詢,一些意想不到的問題和一些微妙的錯誤(像byte?https://nhibernate.jira.com/browse/NH-2812臭名昭著的「無效投」)。切換到標準API(QueryOver)通常有幫助。

至於現在(3.2)這是不可能的,然後,得到的直建議。我會堅持使用Linq,當你遇到問題時暫時切換到標準,以及在未來版本中刪除錯誤和限制時,你可以返回並嘗試將所有內容重寫爲Linq,因爲它應該作爲主查詢語言。

8

你換掉ORM的機會是非常渺茫無法比擬的。

QueryOver和Query都有各自的優缺點。

但NH的好處是,你可以很容易地輕拂的任何它的查詢功能。在我工作的地方,我們使用QueryOver(主要),Query,HQL以及有時直接使用SQL的混合體。

雖然很多來自NH的LINQ查詢很容易轉換爲EF,LightSpeed或您選擇的ORM,但是LINQ提供程序中內置的NH特定LINQ的整個堆(如提取)會使其變得困難在任何時候換出ORM。

有時QueryOver查詢將產生比查詢SQL更好,反之亦然,所以只需使用你喜歡什麼,當他們被執行,以確保生成的SQL是有效的配置您的查詢。