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

前言:

最近有很多同學問我.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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章