目前主流的ORM框架有Entity Framework,Dapper,NHibernate,NBear,Castle ActiveRecord,BATIS.NET六種,都是免費開源的。下邊從官方支持性,數據庫支持性,開發周期,運行效率幾方面進行對比。
1.1 官方支持性
Entity Framework,Dapper,NHibernate,Castle ActiveRecord,BATIS.NET五種都有官方支持,NBear已經停止更新,因此NBear不在使用之列。
1.2 數據庫支持性
主流的ORACLE,MSSQL,MYSQL三種主流數據庫官方提供對Entity Framework的支持,其余4種均為第三方公司提供的框架。
1.3 開發周期
Entity Framework不需要編寫配置文件,不需要編寫sql語句,有代碼生成器,可直接使用原始項目的實體文件;
Dapper類似於Entity Framework codefirst模式,但是需要在數據庫訪問層編寫sql語句;
NHibernate需要編寫配置文件,開發周期最長;
Castle ActiveRecord 基於NHibernate開發,改用Attribute來代替配置文件,沒有本質的區別;
iBATIS.NET與NHibernate類似,需要編寫配置文件。
1.4 運行效率
NHibernate系的效率的最低的,沒有任何的疑問!
很多人毫無疑問的會認為Dapper的效率最高,其基於Emit開發,但是在實際的性能測試中Entity Framework效率最高(參看http://www.cnblogs.com/bluedoctor/p/3378683.html)。
通過綜合的分析,Entity Framework最適合做數據庫持久層。
ORM與ado.net對比
絕大多數人會認同網上廣為傳播的說法,因為鋪天蓋地的orm弊端已經廣為深入人心。現在對其進行批駁:
1、orm大量使用反射,拖慢效率
如果現在還有人提這種說法,說明這種人是多么的out,或者這種人不能勝任技術,轉行做了管理。泛型委托+反射+緩存的機制很早就已經解決了這個問題。
2、orm要先生成sql語句,這個過程慢
我覺得統一這種觀點的人根本就沒有在應用程序中寫過sql。因為sql基本都是通過拼湊字符串,很多人都是通過+=來做的,而且根本就不會寫優秀的sql語句,你寫的sql語句在oracle性能測評工具中是頂級sql嗎?高校的查詢分頁有幾個人會寫? orm都是有官方支持的,是會翻譯成最頂級的sql去執行的!你在開發中不會用到實體?
3、懶
很多人停留在老技術,老風格的層面,學了c,認為優秀的開發語言都應該c風格的,對與語言化的linq總是持否定態度,net2.0 是多少年前的了?
4 眼高於頭頂
應屆畢業生普遍存在的現象,不多說了!