前言:
最近有很多同學問我.NET方面有哪些好用的ORM框架,我覺得這方面的介紹網上應該會介紹的比較全面文章,於是我想搜一篇全面的介紹文章發給他們結果我發現網上說來說去基本上就是那幾個,於是就有了這篇文章。該篇文章已收錄到【DotNetGuide(C#/.NET/.NET Core學習、工作、面試指南)?】GitHub知識庫中歡迎大家前往訂閱(有幫助的話別忘了給我一顆小星星⭐)!
為了方便大家對C#/.NET/.NET Core學習、工作、面試等相關問題進行交流我建了一個DotNetGuide技術交流群(廣告勿擾,因群已滿200人無法再掃入群二維碼入群了,可關注公眾號回覆關鍵字拉您進群)
什麼是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 的差距。它可以幫助您在開發過程中簡化何時使用 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