簡體   English   中英

適用於Linq的流利NHibernate或NHibernate?

[英]Fluent NHibernate or NHibernate for Linq?

流利的NHibernate或NHibernate,我們應該更喜歡linq支持哪一個?

流暢的NHibernate來自Configuration,Linq用於查詢。 他們做不同的事情,你可以同時使用它們。 流暢的NHibernate不是NHibernate或Linq的替代品,而只是一個幫助您在代碼中配置NHibernate而不是使用XML文件的輔助庫。

當您使用NHibernate時,您可以為對象創建映射,並為查詢(LINQ)創建CRUD這些對象。 NHibernate使用XML映射文件。 流暢的NHibernate只是根據約定或任何其他可能的方式為您生成那些映射文件。 因此,如果您使用FNHib則無關緊要。 您仍然可以使用Linq,Hql,Criteria或QueryOver查詢對象,但您仍然需要使用NHibernate。

Fluent for NHibernate在CodeFirst環境中運行良好,您可以在DBA團隊中定義數據庫約定(如果有的話)。 這可以從您的POCO中創建一個非常一致的物理模型。

就傳統數據庫而言,幾乎總是需要Fluent Overrides來處理數據庫不夠一致以使用Fluent Conventions的時間。 通過創建自定義屬性並從自動化約定中讀取它們,也可以輕松擴展Fluent Automapping。

就查詢而言,您不太可能只想使用LINQ進行查詢。 NHibernate LINQ實現和LINQ一般並不總是能夠像你想要的那樣最好地描述你的連接和查詢。 例如,在撰寫本文時,NHibernate LINQ實現不支持LEFT OUTER JOINS。 LINQ可以非常容易閱讀,並且大部分時間它都可以正常運行但是為了更好地控制,您可能希望使用HQL或ICriteria查詢以及LINQ查詢。

我通常打開show_sql以及用於log4net的NHibernate.SQL記錄器,並查看我的查詢創建到SQL的數據庫。

在我想控制我的連接或“渴望獲取”的情況下,我有時會選擇HQLICriteria ,這讓我可以更好地控制NHibernate對我的查詢所做的事情。

實質上,Fluent為映射對象提供了很大的靈活性,並且組合方法(LINQ,HQL和ICritieria)允許您處理幾乎任何查詢/調整情況。

NHibernate - 用XML編寫配置

流暢的NHibernate - 使用類型安全的C#VB.NET編寫配置

您應該選擇Fluent NHibernate,如果您希望它類型安全並且不喜歡用XML編寫配置。 因此,您可以輕松地重命名和重構任何更改。 你只需輸入點, intellisense將幫助你獲得很多文檔。 編寫第一個配置只需要時間,但一旦你知道它很容易。

流暢的NHibernate中的Linq與NHibernate本身是一樣的。 因為像其他答案一樣,Fluent NHibernate只是用於配置並且易於使用NHibernate,其余的來自NHibernate。 例如:

        var maleCustomers = (from t in Session.Query<Entities.Customer>()
                   where t.Gender == Gender.Male
                   select t).ToList();

我使用Fluent NHibernate但是當你右鍵單擊.Query<> “Go To Definition”時,你會發現它來自namespace NHibernate.Linq 所以無論哪種方式實際上你都使用相同的Linq。

如果你說Linq for NHibernate vs內置Linq for Sql是不同的。 我不太確定區別。 我認為它是一樣的但當我嘗試以更復雜的方式進行查詢時,它會拋出異常或只是一個空的Sql查詢。

結論 :你選擇Linq的方式是一樣的,它是NHibernate Linq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM