.NET(C#)主流的ORM框架

.NET(C#)主流ORM總攬程序員

SqlSugar (國內)算法

Dos.ORM (國內)sql

Chloe (國內)數據庫

StackExchange/Dapper (國外)編程

Entity Framework (EF) (國外)緩存

NHibernate (國外)安全

ServiceStack/ServiceStack.OrmLite (國外)數據結構

linq2db (國外)app

Massive (國外)框架

PetaPoco (國外)

SqlSugar

SqlSugar是國人開發者開發的一款基於.NET的ORM框架,是能夠運行在.NET 4.+ & .NET CORE的高性能、輕量級 ORM框架,衆多.NET框架中最容易使用的數據庫訪問技術。

 

特色:

 

開源、免費

國內開發者開發、維護;

支持.NET Core;

支持主流數據庫,如:SQL Server,MySql,Oracle,Sqlite等;

維護更新及時

 

PetaPoco

PetaPoco:輕量的POCO對象和數據庫映射的ORM框架。

 

特色:

 

開源、免費

 

linq2db

linq2db也是一款快速、輕量、類型安全的POCO對象和數據庫映射的ORM框架。從構架上來講,linq2db是對好比:Dapper、PetaPoco這個的微ORM的進一步封裝,但它不像Entity Framework那樣笨重。它沒有實現狀態跟蹤,須要本身處理實體的狀態更改等。

 

推薦等級:★★★★☆

 

Dos.ORM

Dos.ORM(原Hxj.Data)於2009年發佈,2015年正式開源。在開發過程當中參考了NBear與MySoft,吸收了他們的一些精華,加入新思想,同時參考EF的Lambda語法進行大量擴展。該組件已在數百個成熟項目中應用。官方網站:http://ITdos.com/Dos/ORM/Inde...

 

特色:

 

開源、免費

上手簡單,0學習成本。使用方便,按照sql書寫習慣編寫C#.NET代碼。功能強大

高性能,接近手寫Sql

體積小(不到150kb,僅一個dll)

完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等數據庫

支持大量Lambda表達式寫法,國產ORM支持度最高,開源中國ORM排行前三

不須要像NHibernate的XML配置,不須要像EF的各類數據庫鏈接驅動

遵循MIT開源協議,除不容許更名,其它隨意定製修改

 

 

ServiceStack.OrmLite

ServiceStack.OrmLite的目標是提供一種方便,無干擾,無配置的RDBMS無關類型的封裝,與SQL保持高度的契合,展示直觀的API,能夠生成可預測的SQL。

ServiceStack.OrmLite的宗旨:Fast, Simple, Typed ORM for .NET

 

特色:

 

開源、收費(免費版只支持單個庫10張表)

 

 

Entity Framework (EF)

ADO.NET Entity Framework 是微軟以 ADO.NET 爲基礎所發展出來的對象關係對應 (O/R Mapping) 解決方案。該框架曾經爲.NET Framework的一部分,但version 6以後從.NET Framework分離出來。

 

 

 

NHibernate

NHibernate是一個面向.NET環境的對象/關係數據庫映射工具。對象/關係數據庫映射(object/relational mapping,ORM)這個術語表示一種技術,用來把對象模型表示的對象映射到基於SQL的關係模型數據結構中去。

 

特色:

 

開源、免費

批量寫入

批量讀/多重查詢特性(我理解是在說Future?)

批量的集合加載

帶有lazy="extra"的集合

集合過濾器和分頁集合

二級緩存(實際上NH的二級緩存貌似也很簡單?)

集成和擴展性

代碼自動生成,減小代碼和sql的開發量,使開發人員擺脫開sql,ado.net和事務,緩存等底層

 

 

Massive

Massive:小巧,動態的微ORM框架。

 

.NET(C#)主流ORM總攬SqlSugar (國內)Dos.ORM (國內)Chloe (國內)StackExchange/Dapper (國外)Entity Framework (EF) (國外)NHibernate (國外)ServiceStack/ServiceStack.OrmLite (國外)linq2db (國外)Massive (國外)PetaPoco (國外)SqlSugarSqlSugar是國人開發者開發的一款基於.NET的ORM框架,是能夠運行在.NET 4.+ & .NET CORE的高性能、輕量級 ORM框架,衆多.NET框架中最容易使用的數據庫訪問技術。
特色:
開源、免費國內開發者開發、維護;支持.NET Core;支持主流數據庫,如:SQL Server,MySql,Oracle,Sqlite等;維護更新及時
PetaPocoPetaPoco:輕量的POCO對象和數據庫映射的ORM框架。
特色:
開源、免費
linq2dblinq2db也是一款快速、輕量、類型安全的POCO對象和數據庫映射的ORM框架。從構架上來講,linq2db是對好比:Dapper、PetaPoco這個的微ORM的進一步封裝,但它不像Entity Framework那樣笨重。它沒有實現狀態跟蹤,須要本身處理實體的狀態更改等。
推薦等級:★★★★☆
Dos.ORMDos.ORM(原Hxj.Data)於2009年發佈,2015年正式開源。在開發過程當中參考了NBear與MySoft,吸收了他們的一些精華,加入新思想,同時參考EF的Lambda語法進行大量擴展。該組件已在數百個成熟項目中應用。官方網站:http://ITdos.com/Dos/ORM/Inde...
特色:
開源、免費上手簡單,0學習成本。使用方便,按照sql書寫習慣編寫C#.NET代碼。功能強大高性能,接近手寫Sql體積小(不到150kb,僅一個dll)完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等數據庫支持大量Lambda表達式寫法,國產ORM支持度最高,開源中國ORM排行前三不須要像NHibernate的XML配置,不須要像EF的各類數據庫鏈接驅動遵循MIT開源協議,除不容許更名,其它隨意定製修改

ServiceStack.OrmLiteServiceStack.OrmLite的目標是提供一種方便,無干擾,無配置的RDBMS無關類型的封裝,與SQL保持高度的契合,展示直觀的API,能夠生成可預測的SQL。ServiceStack.OrmLite的宗旨:Fast, Simple, Typed ORM for .NET
特色:
開源、收費(免費版只支持單個庫10張表)

Entity Framework (EF)ADO.NET Entity Framework 是微軟以 ADO.NET 爲基礎所發展出來的對象關係對應 (O/R Mapping) 解決方案。該框架曾經爲.NET Framework的一部分,但version 6以後從.NET Framework分離出來。


NHibernateNHibernate是一個面向.NET環境的對象/關係數據庫映射工具。對象/關係數據庫映射(object/relational mapping,ORM)這個術語表示一種技術,用來把對象模型表示的對象映射到基於SQL的關係模型數據結構中去。
特色:
開源、免費批量寫入批量讀/多重查詢特性(我理解是在說Future?)批量的集合加載帶有lazy="extra"的集合集合過濾器和分頁集合二級緩存(實際上NH的二級緩存貌似也很簡單?)集成和擴展性代碼自動生成,減小代碼和sql的開發量,使開發人員擺脫開sql,ado.net和事務,緩存等底層

MassiveMassive:小巧,動態的微ORM框架。

 

 

 

什麼是ORM
ORM(Object-relational mapping),中文翻譯爲對象關係映射,是一種爲了解決面向對象與關係數據庫存在的互不匹配的現象的技術。簡單的說,ORM是經過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關係數據庫中。

爲何用ORM
在程序開發中,數據庫保存的表,字段與程序中的實體類之間是沒有關聯的,在實現持久化時就比較不方便。那麼,到底如何實現持久化呢?一種簡單的方案是採用硬編碼方式,爲每一種可能的數據庫訪問操做提供單獨的方法。這種方案存在如下不足:

1.持久化層缺少彈性。一旦出現業務需求的變動,就必須修改持久化層的接口
2.持久化層同時與域模型與關係數據庫模型綁定,無論域模型仍是關係數據庫模型發生變化,毒藥修改持久化曾的相關程序代碼,增長了軟件的維護難度
ORM提供了實現持久化層的另外一種模式,它採用映射元數據來描述對象關係的映射,使得ORM中間件能在任何一個應用的業務邏輯層和數據庫層之間充當橋樑

ORM的方法論基於三個核心原則:

簡單:以最基本的形式建模數據
傳達性:數據庫結構被任何人都能理解的語言文檔化
精確性:基於數據模型建立正確標準化了的結構
本文以C#編程語言爲例,在傳統的數據讀取操做中,咱們以Ado.net的方式對數據庫進行CRUD操做,使用的基本都是SQL硬編碼,好比有如下數據庫查詢操做:

String sql = "SELECT ... FROM persons WHERE id = 10";
DbCommand cmd = new DbCommand(connection, sql);
Result res = cmd.Execute();
String name = res[0]["FIRST_NAME"];
使用了ORM映射的C#實現的僞代碼:

Person p = repository.GetPerson(10);
String name = p.getFirstName();
上面的示例代碼表示咱們能夠從數據倉庫repository中獲取到一個實體對象,固然數據倉庫中可能包含其餘的方法,你也能夠定義本身的ORM實現,好比:

Person p = Person.Get(10);
一般,在處理ORM映射和數據倉庫時會暴露一些過濾或者查詢方法,容許客戶端對數據集進行進一步的篩選等操做,好比代碼演示從數據庫中查詢ID=10的用戶:

Person p = Person.Get(Person.Properties.Id == 10);
優/缺點
優勢
與傳統的數據庫訪問技術相比,ORM有如下優勢:

開發效率更高
數據訪問更抽象、輕便
支持面向對象封裝
缺點
下降程序的執行效率
思惟固定化
從系統結構上來看,採用ORM的系統通常都是多層系統,系統的層次多了,效率就會下降。ORM是一種徹底的面向對象的作法,而面向對象的作法也會對性能產生必定的影響。

在咱們開發系統時,通常都有性能問題。性能問題主要產生在算法不正確和與數據庫不正確的使用上。ORM所生成的代碼通常不太可能寫出很高效的算法,在數據庫應用上更有可能會被誤用,主要體如今對持久對象的提取和和數據的加工處理上,若是用上了ORM,程序員頗有可能將所有的數據提取到內存對象中,而後再進行過濾和加工處理,這樣就容易產生性能問題。

總結
做爲一名編程人員,在ORM使用的觀念上會有不一樣,具體取捨需根據具體的項目和場景
相關文章
相關標籤/搜索