Nhibernate和 Entity Framework 4优缺点
關于NHibernate和Entity Framework 4.0各自優點和功能,我們知道這二者都是基于.NET的對象/關系映射框架。EF 4相比EF1.0所作出的進步之后,使得NHibernate成為更好的ORM解決方案的特性:
批量寫入——我們可以配置NHibernate,使其對數據庫進行批量寫入,從而在你需要向數據庫中寫入多個指令的時候,NHibernate只需要與其進行一次交互,而不需要在每個指令的執行過程中都要訪問數據庫。
批量讀/多重查詢特性——NHibernate使你可以在與數據庫的一次交互過程中批量執行多個查詢,而不需要在獨立的交互過程中執行每個查詢。
批量的集合加載——當你延遲加載集合的時候,NHibernate能夠找到其它相同類型而沒有載入的集合,然后只對數據庫進行一次訪問,就把它們全部載入。這種方法很好,因為這樣就可以避免處理SELECT N+1的問題。
帶有lazy="extra"的集合——額外的延遲意味著NHibernate會適應你可能在集合之上所要執行的操作。這也意味著 blog.Posts.Count不會強行載入整個集合,而是創建“select count(*) from Posts where BlogId = 1”的指令,然后blog.Posts.Contains() 會類似地執行單獨的查詢,而不需要付出將整個集合都載入到內存中的代價。
集合過濾器和分頁集合——這讓你能夠在實體集合上定義附加的過濾器(包括分頁!),這意味著你可以很容易地對blog.Posts集合進行分頁瀏覽,而不需要將所有的內容都載入到內存中。
二級緩存——管理緩存很復雜,之前我曾經談過這為什么很重要,所以現在我將跳過它。
調整——當你需要某些框架沒有提供的功能的時候,這就顯得很重要了。使用NHibernate,幾乎在所有的情況下,你都有擴展點,但如果使用的是EF,你是完全并且絕對做不到的。
集成和擴展性——NHibernate有大量擴展項目,像NHibernate Search、NHibernate Validator,NHibernate Shards等等。而在EF中不僅不存在這樣的項目,而且大多數情況下也無法編寫這樣的項目,因為EF沒有任何可以使用的擴展點。
Rahien也提到了使用EF 4的優勢:
EF 4.0比當前的NHibernate實現擁有更好的Linq提供程序。這也正是NHibernate正在積極改進的地方,NH 3.0將會彌補這個問題。
EF屬于微軟。
NH的另一個主要優勢在于它是開源軟件。這些年來我們可能多次需要給NH打補丁,以修正缺陷或者添加我所需要的功能。如果使用的是EF,我們是不能做這些的。
我想你可以很清楚地發現,在這里只顯示了NHibernate的優點。而根本沒有涉及到它的缺點——即便是你提到的關于LINQ提供程序的說法也和事實相去甚遠;另一個眾所周知的問題是EF支持變更跟蹤,而NH不支持,這在很多情況下會很大程度上影響性能(事實上,你應該完全忘記NH中的特定情況 ——那是“有意地”)。
對單元測試和設計器的功能進行了比較:
我想NHibernate最大的優勢在于它能夠更好地支持單元測試。EF 4并非為測試而設計,因此很難基于EF 4為某些自定義的解決方案編寫單元測試。
另一方面,EF 4擁有很好的設計器(對于真實世界中的大型項目,這是你所需要的最重要的東西),還有基于該設計器的POCO T4模板。我想現在是你應該開始考慮為NHibernate建立自己的設計器,而不是拒絕設計器和代碼生成器的時候了。如果社區需要NHibernate 的設計器,那么就給他們好的設計器。第三方的設計器和EF4的設計器相差甚遠,可能除了LLBGEN 3還好一些,但是它還沒有發布,而且不是免費的。
還有EF比NH好的地方就在于文檔、一致的示例以及在每次開發者大會上發表的大量的傳播演講,還有日夜不停發表的文章……NH應該在這個問題上吸取教訓(并且請不要找借口,它確實應該在文檔方面吸取教訓。如果你想要知道在那上面應該吸取多大的教訓,那么請現在就去查看為_N_hibernate提供的 DDL SQL生產文檔,看它有多偉大,甚至能夠產生……java類。嗯?),同時還有很多可選擇的方法,那真的不是它所擁有的優勢。
Felix建議采用組合式的解決方案:
不要相信某人所說的“OR/M是編碼的越南戰場”,NH是老兵,而EF是年輕的新兵。不幸的是微軟不支持開源,如果可以的話,事情會變得更容易:使用微軟提供的設計器和集成工具,使用NH作為OR/M,這會是高生產力的解決方案。
盡管Entity Framework擁有更好的LINQ提供程序、文檔,并且是由微軟所支持的,但NHibernate具有大量Entity Framework 4.0所不具備的特性,像批量讀/寫、“額外的”延遲、集合過濾器、調整等等。
轉載于:https://www.cnblogs.com/wangyanling1016/p/3665081.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Nhibernate和 Entity Framework 4优缺点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常见的标记接口
- 下一篇: ssh中的相对路径与绝对路径的问题