葡萄牙的一位開發(fā)者Ricardo Peres最近發(fā)布了一篇文章,,以看起來無偏見的形式對領(lǐng)先的兩種.NET ORM:NHibernate和實體框架進行了比較 ,。我們建議考慮使用這兩種框架的人都應該讀下他的文章,NHibernate和實體框架之間的區(qū)別,,另外還將指出一些關(guān)鍵的區(qū)別,。
葡萄牙的一位開發(fā)者Ricardo Peres最近發(fā)布了一篇文章,以看起來無偏見的形式對領(lǐng)先的兩種.NET ORM:NHibernate和實體框架進行了比較,。我們建議考慮使用這兩種框架的人都應該讀下他的文章,,NHibernate和實體框架之間的區(qū)別,另外還將指出一些關(guān)鍵的區(qū)別,。 從架構(gòu)上看,,NHibernate基于Java的Hibernate ORM。Ricardo寫道:
評論者Morten Mertner說:“我永遠都不會使用NHibernate。盡管它擁有很棒的特性列表,,但它并非一種能夠輕松使用的產(chǎn)品,,而且API和設(shè)計中始終帶有遺傳自Java的味道(同樣,很多Java API都太企業(yè)化,,并且架構(gòu)過于龐大,;結(jié)果會與你想要的大相徑庭)?!?/P> 實體框架遵循的是更加傳統(tǒng)的.NET設(shè)計,,其中所有一切都封裝在單獨的ObjectContext或者DbContext中。這讓使用對象更加簡單,,但是缺點在于“類并沒有因此是輕量級的,,因為它有與 NHibernate類似的內(nèi)容,并且一般不會看到這樣的例子:實例可以緩存在字段中,?!?/P> 對于映射,NHibernate和實體框架之間的關(guān)鍵區(qū)別在于,,前者支持基于XML的映射文件,,該文件可以獨立部署。在理論上,,這讓你可以針對不同的數(shù)據(jù)庫schema使用相同的對象模型,,而不需要重新編譯應用程序。但在實踐中很少這么使用,。 在很多方面古老一些的NHibernate要優(yōu)于實體框架,。Ricardo提供了更多細節(jié),并簡要地總結(jié)如下:
也有一些領(lǐng)域中,實體框架會比NHibernate,,比方說:
還有某些領(lǐng)域,兩種框架都可以做出改進,,像批處理功能。當需要真正支持SQL的高級特性——像通用表表達式——的時候,,兩種ORM框架都無法支持SQL Alchemy,。 我們應該發(fā)現(xiàn)兩個項目都很活躍,,經(jīng)常會有定期的改進。所以,,如果二者都能夠滿足你的最小需求,,那么考慮就更多集中在程序庫的設(shè)計模式和哲學上,而不是在特性列表上,。 |
|
來自: 昵稱10504424 > 《軟件雜談》