前言:
最近有很多同學問我.NET方面有哪些好用的ORM框架,我覺得這方面的介紹網上應該會介紹的比較全面文章,於是我想搜一篇全面的介紹文章發給他們結果我發現網上說來說去基本上就是那幾個,於是就有了這篇文章。該篇文章已收錄到【DotNetGuide(C#/.NET/.NET Core學習、工作、面試指南)👉】GitHub知識庫中歡迎大家前往訂閱(有幫助的話別忘了給我一顆小星星⭐),假如大家有更好的ORM框架推薦可以前往GitHub倉庫中留言💖!
什么是ORM?
如何選擇合適自己的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相關拓展程序包:
- EFCore.BulkExtensions - EF的批量操作庫。
- EntityFramework-Plus - EF的增強工具集,包括過濾器,審核,緩存,查詢,批刪除,批更新等。
- EntityFramework.Exceptions - 當您的SQL查詢違反SqlServer,MySql或PostgreSQL中的數據庫約束時,請對EntityFrameworkCore使用類型化的異常處理。
- EntityFramework.Triggers - EF觸發器。
- EntityFramework.Rx - EF的Reactive 擴展程序。
- Npgsql.EntityFrameworkCore.PostgreSQL - PostgreSQL的EF驅動程序。
- EntityFramework.TypedOriginalValues - 通過某些特殊方法來獲得數據庫對象在本次修改前的原始值。常見的使用場景是對數據庫操作的數據做審計。
- EntityFramework.VersionedProperties - 將對象里每次變更歷史自動保存到一個特定的屬性里。審計或者做歷史版本時比較適用。
- LINQKit - LINQKit是LINQ對SQL和Entity Framework的免費擴展集。
- Pomelo.EntityFrameworkCore.MySql - mysql的EF驅動程序。
- spectre.query - EF的簡單查詢庫。
- StoredProcedureEFCore-用於執行存儲過程的 Entity Framework Core 擴展。
- ShardingCore - 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的性能。
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
- 與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之間的差距。它幫助您簡化在開發過程中何時使用基本操作和高級操作的切換。
主要特點:
- 易於使用- 這些操作都作為您的 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
querybuilder
SQL 查詢構建器,用 c# 編寫,幫助您輕松構建復雜的查詢,支持 SqlServer、MySql、PostgreSql、Oracle、Sqlite 和 Firebird。
官網地址:https://sqlkata.com/