久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

NHibernate和實體框架比較

 昵稱10504424 2013-02-05
葡萄牙的一位開發(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寫道:

 在NHibernate中,,工作單元和配置項以及模型實例都相互獨立,。你首先會創(chuàng)建Configuration對象,在其中你會指定所有NHibernate設(shè)置,,像要使用的數(shù)據(jù)庫和語言,、批處理的大小、映射關(guān)系等等,,然后你會依此構(gòu)建ISessionFactory,。ISessionFactory會持有與特定數(shù)據(jù)庫綁定的模型和元數(shù)據(jù),以及來自于Configuration對象的設(shè)定,,并且,一般每個進程中只有一個實例,。最終,,你會基于ISessionFactory創(chuàng)建ISession的示例,它是工作單元(Unit of Work)以及標識符地圖(Identity Map)的NHibernate表現(xiàn)形式,。這是一種輕量級的對象,,它本質(zhì)上會根據(jù)需要打開和關(guān)閉數(shù)據(jù)庫連接,并跟蹤與之相關(guān)的實體,。ISession對象很容易創(chuàng)建和銷毀,,因為所有的模型復雜性都存儲在ISessionFactory和Configuration對象中。

評論者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é)如下:

  • 關(guān)聯(lián):都支持一對一,、一對多,、多對多,但是NHibernate還支持各種排序,、未排序和索引的選項,。它甚至還有不變的(immutable)、索引的(indexed)列表,。
  • 緩存:NHibernate提供了帶有大量實現(xiàn)的二級緩存,。實體框架沒有任何對此內(nèi)建的支持,但是有些增加二級緩存的例子,。
  • ID生成:NHibernate提供了大概十二種策略,,這取決于你如何計算。實體框架只為SQL Server提供了主要的三種:標識符列,、GUID,、和手動賦值,。
  • 事件:實體框架只有兩種基于事件的擴展點:ObjectMaterializedSavingChanges?!癗Hibernate擁有非常豐富的事件模型,,暴露了超過20種事件,有些針對同步前執(zhí)行(synchronous pre-execution),,有些針對異步后執(zhí)行(asynchronous post-execution)”,。
  • 級聯(lián):“兩種框架都支持集合和關(guān)聯(lián)的級聯(lián):當實體被刪除的時候,相關(guān)的子實體也會被刪除,。NHibernate還提供了一種特性,,可以把子實體上的外鍵設(shè)置為NULL,而不刪除它們,?!?/LI>
  • 清理變更:NHibernate提供了一種自動模式,其中在必要的時候會保存變更,,像“如果有一種實體類型的臟實例,,而查詢是針對這種實體類型執(zhí)行”。FlushMode.Auto實際上是默認值,,但偶爾會看到由于自動清除而導致性能問題,。

也有一些領(lǐng)域中,實體框架會比NHibernate,,比方說:

  • 跟蹤變更:盡管兩種框架在工作單元級別默認都能夠跟蹤變化,,而實體框架還提供了自我跟蹤實體(self-tracking entities)
  • 整合:實體框架當然會與Visual Studio和各種ASP.NET以及WCF類庫有很好的綁定,。
  • 文檔:“這是另一種實體框架表現(xiàn)非常好的地方:NHibernate缺少針對初學者的文檔,,并且也沒有與其最新版本同步的最新API參考?!?/LI>
  • 查詢:Craig寫到:“NHibernate有更豐富的特性,,但有一個領(lǐng)域除外,那就是對Linq的支持,。 因為對于很多用戶來說,,Linq或者其它查詢語言都是ORM中最可見的部分,它會讓人對功能產(chǎn)生錯誤印象,?!?/LI>

還有某些領(lǐng)域,兩種框架都可以做出改進,,像批處理功能。當需要真正支持SQL的高級特性——像通用表表達式——的時候,,兩種ORM框架都無法支持SQL Alchemy,。

我們應該發(fā)現(xiàn)兩個項目都很活躍,,經(jīng)常會有定期的改進。所以,,如果二者都能夠滿足你的最小需求,,那么考慮就更多集中在程序庫的設(shè)計模式和哲學上,而不是在特性列表上,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多