日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Nhibernate和 Entity Framework 4优缺点

發布時間:2024/1/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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优缺点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。