2022年了有哪些值得推薦的.NET ORM框架?

追逐時光者發表於2022-02-20

前言:

最近有很多同學問我.NET方面有哪些好用的ORM框架,我覺得這方面的介紹網上應該會介紹的比較全面文章,於是我想搜一篇全面的介紹文章發給他們結果我發現網上說來說去基本上就是那幾個,於是就有了這篇文章。該篇文章已收錄到【DotNetGuide(C#/.NET/.NET Core學習、工作、面試指南)?】GitHub知識庫中歡迎大家前往訂閱(有幫助的話別忘了給我一顆小星星⭐)!

為了方便大家對C#/.NET/.NET Core學習、工作、面試等相關問題進行交流我建了一個DotNetGuide技術交流群(廣告勿擾,入群二維碼過期可關注公眾號進群)

什麼是ORM?

ORM 是 Object Relational Mapping 的縮寫,譯為“物件關係對映”,是一種程式設計技術,用於實現物件導向程式語言裡不同型別系統的資料之間的轉換。它解決了物件和關係型資料庫之間的資料互動問題,ORM的作用是在關係型資料庫和業務實體物件之間作一個對映,這樣我們在具體的操作業務物件的時候,就不需要再去和複雜的SQL語句打交道,只需簡單的操作物件的屬性和方法。

如何選擇合適自己的ORM框架?

對於我們而言選擇ORM框架的目的其實都是為了讓我們的程式更好的運算元據庫,提高開發程式設計效率和程式的維護擴充性。因此我們在為自己負責的專案選擇合適的ORM框架的時候需要從專案的業務場景出發,選擇最適合自己團隊的ORM框架(注意沒有完美的框架,適合團隊的才是最好的)。以下是一些比較好用且優秀的.NET-ORM框架,排名不分先後可供大家參考學習(假如您有更好的.NET相關ORM推薦請在文末留言,謝謝)。

EF/EF Core

Entity Framework (EF) Core 是輕量化、可擴充套件、開源和跨平臺版的常用 Entity Framework 資料訪問技術,EF Core 是適用於 .NET 的現代物件資料庫對映器。它支援 LINQ 查詢、更改跟蹤、更新和架構遷移。EF Core 通過提供程式外掛 API 與 SQL Server、Azure SQL 資料庫、SQLite、Azure Cosmos DB、MySQL、PostgreSQL 和其他資料庫一起使用。(微軟官方出品)。

EF Core 可用作物件關係對映程式 (O/RM),這可以實現以下兩點:

  • 使 .NET 開發人員能夠使用 .NET 物件處理資料庫。
  • 無需再像通常那樣編寫大部分資料訪問程式碼。

官方文件教程:https://docs.microsoft.com/zh-cn/ef/

GitHub地址:https://github.com/dotnet/efcore

以下是EF/EF Core相關擴充程式包:

Dapper

Dapper是一個簡單的.NET物件對映器,在速度方面具有"King of Micro ORM"的頭銜,幾乎與使用原始的ADO.NET資料讀取器一樣快。ORM是一個物件關係對映器,它負責資料庫和程式語言之間的對映。Dapper通過擴充套件IDbConnection提供一些有用的擴充套件方法去查詢您的資料庫。
主要特點:高效能、易排查、易運維、靈活可控。
 

以下是Dapper相關擴充程式包:

  • Dapper-Extensions - Dapper Extensions 是一個小型ORM庫,通過為您的 POCO 新增基本的 CRUD 操作(獲取、插入、更新、刪除)來補充Dapper對於更高階的查詢場景,Dapper Extensions 提供了一個謂詞系統。這個庫的目標是通過不需要任何屬性或基類繼承來保持你的 POCO 純淨。
  • Dapper-FluentMap - Dapper的擴充套件。
  • Dommel - Dapper的CRUD操作。
  • MicroOrm.Dapper.Repositories - Dapper的CRUD操作。

FreeSql

FreeSql 是一款功能強大的物件關係對映(O/RM)元件,支援 .NET Core 2.1+、.NET Framework 4.0+ 以及 Xamarin。
主要特點:
  • 支援 CodeFirst 模式,即便使用 Access 資料庫也支援資料遷移;
  • 支援 DbFirst 模式,支援從資料庫匯入實體類,或使用實體類生成工具生成實體類;
  • 支援 深入的型別對映,比如 PgSql 的陣列型別等;
  • 支援 豐富的表示式函式,以及靈活的自定義解析;
  • 支援 導航屬性一對多、多對多貪婪載入,以及延時載入;
  • 支援 讀寫分離、分表分庫、過濾器、樂觀鎖、悲觀鎖;
  • 支援 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/達夢/人大金倉/神舟通用/南大通用/翰高/ClickHouse/Access 等資料庫;

官方文件地址:http://www.freesql.net/

GitHub地址:https://github.com/dotnetcore/FreeSql

SqlSugar

SqlSugar是一款老牌 .NET 開源ORM框架,支援.NET CORE 和 MySql、SqlServer、Sqlite、Oracle 、 postgresql 、達夢、人大金倉 資料庫,具有EF NH的功能,比EF更人性化的語法,支援真實的批量操作,另外還有媲美Dapper的效能。

主要特點:簡單易用、功能齊全、高效能、輕量級、服務齊全、支援全自動分表元件,SAAS分庫,大資料處理的ORM。
 
官網地址:http://www.donet5.com

Chloe

Chloe 是一個輕量級的物件/關係對映(ORM)庫。查詢介面類似於 LINQ。您可以使用 Chloe.ORM 通過 lambda 查詢 LINQ 之類的資料並執行任何操作(加入查詢 | 組查詢 | 聚合查詢 | 插入 | 批量更新 | 批量刪除)。

文件地址https ://github.com/shuxinqin/Chloe/wiki

GitHub地址:https://github.com/shuxinqin/Chloe

nhibernate-core 

 NHibernate 是一個成熟的開源物件關係對映器,適用於 .NET 框架。它被積極開發,功能齊全,並在數千個成功的專案中使用。

NHibernate社群網站 - https://nhibernate.info 

GitHub地址:https://github.com/nhibernate/nhibernate-core

SmartSql

SmartSql = C# 中的 MyBatis + .NET Core+ 快取(記憶體 | Redis)+ R/W 拆分 + PropertyChangedTrack +動態儲存庫 + InvokeSync + 診斷。

SmartSql 借鑑了 MyBatis 的思想,使用 XML 來管理 SQL ,並且提供了若干個篩選器標籤來消除程式碼層面的各種 if/else 的判斷分支。SmartSql將管理你的 SQL ,並且通過篩選標籤來維護本來你在程式碼層面的各種條件判斷,使你的程式碼更加優美。

主要特點:簡潔、高效、高效能、擴充套件性、監控、漸進式開發!

PetaPoco

PetaPoco 是一個用於 .NET(4、4.5+、net standard 2.0+)和 Mono 的微型、快速、易於使用的 micro-ORM。由於 PetaPoco 所代表的簡單性和易用性,它受到許多人的喜愛。PetaPoco 是首選的微 ORM,也是任何體面的開發人員工具包中必不可少的實用程式。
主要特點:
  • Dapper一樣,它很快,因為它使用動態方法生成 (MSIL) 將列值分配給屬性。
  • Massive一樣,它現在也支援動態 Expandos。
  • ActiveRecord一樣,它支援物件和資料庫表之間的密切關係。
  • SubSonic一樣,它支援使用 T4 模板生成 poco 類(僅限 V5)。
  • Massive一樣,它以單個檔案的形式提供,您可以輕鬆地將其新增到任何專案或編譯(僅限 V5)。

linq2db

LINQ to DB 是最快的LINQ資料庫訪問庫,在POCO物件和資料庫之間提供了一個簡單、輕量、快速且型別安全的層。
在架構上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步,因為您使用 LINQ 表示式,而不是魔術字串,同時在程式碼和資料庫之間維護一個薄抽象層。您的查詢由 C# 編譯器檢查並允許輕鬆重構。
但是,它不像 LINQ to SQL 或實體框架那麼重。沒有更改跟蹤,因此您必須自己進行管理,但從積極的方面來說,您可以獲得更多控制權並更快地訪問您的資料。

文件地址:https://linq2db.github.io/ 

GitHub地址:https://github.com/linq2db/linq2db

RepoDb

 RepoDB 是一個開源的 .NET ORM 庫,它彌補了微 ORM 和全 ORM 的差距。它可以幫助您在開發過程中簡化何時使用 BASIC 和 ADVANCE 操作的切換。

主要特點:

  • 易於使用- 這些操作都作為您的 IDbConnection 物件的擴充套件方法實現。只要您的連線處於開啟狀態,就可以對您的資料庫呼叫任何操作。
  • 高效能- 它快取已經生成的編譯表示式以供將來重用和執行。它瞭解您的架構以建立最佳的編譯表示式 AOT。
  • 記憶體高效- 它提取並快取您的物件屬性、執行上下文、物件對映和 SQL 語句。它在整個轉換和執行過程中重用它們。
  • 動態和混合- 它提供了成熟 ORM 的一些高階功能。它極大地幫助開發人員在開發過程中進行上下文切換時簡化體驗。
  • 開源軟體——它是一個開源軟體,並且永遠是免費的。它旨在進一步改進 .NET 資料訪問體驗和解決方案,以及社群的集體思想。
  • 高質量- 它是一個高質量的微型 ORM,由 10K+ 真實單元和整合測試支援。它經過高度測試,並被生產環境中執行的各種關鍵系統使用。

GitHub地址:https://github.com/mikependon/RepoDB

ServiceStack.OrmLite

 OrmLite是一個快速、簡單、型別化的.NET ORM,OrmLite 的目標是提供一個方便、DRY、無配置、與 RDBMS 無關的型別包裝器,該包裝器與 SQL 保持高度親和性,公開直觀的 API,生成可預測的 SQL 並乾淨地對映到斷開連線和資料傳輸物件 (DTO) 友好、普通的舊C# 物件 (POCO)。這種方法更容易推理您的資料訪問,從而清楚地知道什麼 SQL 在什麼時間執行,同時減輕意外行為、隱式 N+1 查詢和重物件關係對映器 (ORM) 中普遍存在的洩漏資料訪問。

文件地址:https://docs.servicestack.net/ormlite/

GitHub地址:https://github.com/ServiceStack/ServiceStack.OrmLite

SQLite-net

 簡單、強大、跨平臺的 SQLite 客戶端和 .NET 的 ORM。

主要特點:

  • 非常容易與現有專案整合並在所有 .NET 平臺上執行。

  • SQLite 上的瘦包裝器,快速高效。(這個庫不應該是您查詢的效能瓶頸。)

  • 用於安全執行 CRUD 操作和查詢(使用引數)並以強型別方式檢索這些查詢結果的非常簡單的方法。

  • 與您的資料模型一起工作,而不會強迫您更改您的類。(包含一個小的反射驅動 ORM 層。)

GitHub地址:https://github.com/praeclarum/sqlite-net

Insight.Database

Insight.Database是一個用於 .NET 的快速、輕量級的 micro-orm。

GitHub地址:https://github.com/jonwagner/Insight.Database

cyqdata

 cyq.data是一個高效能且功能最強大的orm(支援.NET Core),支援Txt、Xml、Access、Sqlite、Mssql、Mysql、Oracle、Sybase、Postgres、DB2、Redis、MemCache。

GitHub地址:https://github.com/cyq1162/cyqdata

TinyORM

TinyORM是一個簡單、快速且安全的微型.NET ORM。

Wiki地址:https://github.com/sdrapkin/SecurityDriven.TinyORM/wiki

GitHub地址:https://github.com/sdrapkin/SecurityDriven.TinyORM

 

 

相關文章