什麼是ORM?
ORM 是 Object Relational Mapping 的縮寫,譯為“物件關係對映”,是一種程式設計技術,用於實現物件導向程式語言裡不同型別系統的資料之間的轉換。它解決了物件和關係型資料庫之間的資料互動問題,ORM的作用是在關係型資料庫和業務實體物件之間作一個對映,這樣我們在具體的操作業務物件的時候,就不需要再去和複雜的SQL語句打交道,只需簡單的操作物件的屬性和方法。
如何選擇合適自己的ORM框架?
對於我們而言選擇ORM框架的目的其實都是為了讓我們的程式更好的運算元據庫,提高開發程式設計效率和程式的維護擴充性。因此我們在為自己負責的專案選擇合適的ORM框架的時候需要從專案的業務場景出發,選擇最適合自己團隊的ORM框架(注意沒有完美的框架,適合團隊的才是最好的)。以下是一些比較好用且優秀的.NET ORM框架彙總,排名不分先後可供大家參考學習(假如您有更好的.NET相關ORM推薦請在文末留言,謝謝)。
.NET ORM框架使用情況統計
統計以下16個.NET ORM框架使用情況(可多選),下面16個.NET ORM框架都是比較好用且優秀的框架,排名不分先後可供大家參考學習。歡迎大家參與、分享,之後會把統計結果釋出在微信公眾號和DotNetGuide技術交流群裡✨。
使用情況統計微信投票地址(需要用手機微信登入投票/檢視投票結果):https://mp.weixin.qq.com/s/dyq-WVeua6vRY3rpSdhBmw
優秀專案和框架精選
下面的.NET ORM框架已收錄到C#/.NET/.NET Core優秀專案和框架精選中,關注優秀專案和框架精選能讓你及時瞭解C#、.NET和.NET Core領域的最新動態和最佳實踐,提高開發工作效率和質量。坑已挖,歡迎大家踴躍提交PR推薦或自薦(讓優秀的專案和框架不被埋沒?)。
https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
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 和其他資料庫一起使用。(微軟官方出品)。
- 官方檔案教程:https://docs.microsoft.com/zh-cn/ef/
- GitHub地址:https://github.com/dotnet/efcore
Dapper
Dapper是一個簡單的.NET物件對映器,在速度方面具有"King of Micro ORM"的頭銜,幾乎與使用原始的ADO.NET資料讀取器一樣快。ORM是一個物件關係對映器,它負責資料庫和程式語言之間的對映。Dapper透過擴充套件IDbConnection提供一些有用的擴充套件方法去查詢您的資料庫。
- GitHub地址:https://github.com/DapperLib/Dapper
SqlSugar
SqlSugar 是一款 老牌 .NET 開源多庫架構ORM框架(EF Core單庫架構),由果糖大資料科技團隊 維護和更新 ,開箱即用最易上手的.NET ORM框架 。
- 官網地址:http://www.donet5.com
- GitHub地址:https://github.com/donet5/SqlSugar
FreeSql
FreeSql 是一款功能強大的物件關係對映(O/RM)元件,支援 .NET Core 2.1+、.NET Framework 4.0+ 以及 Xamarin。
Chloe.ORM
Chloe.ORM 是一款國產十分穩定可靠的 ORM 框架。除了常規增刪查改外還支援連線查詢、分組查詢、聚合查詢、子查詢,大部分操作可透過 lambda 完成。還支援分庫分表分頁、聚合、分組聚合,並支援多個欄位組合分片以及多欄位路由。
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,也是任何體面的開發人員工具包中必不可少的實用程式。
- 檔案地址:https://discoverdot.net/projects/peta-poco
- GitHub地址:https://github.com/CollaboratingPlatypus/PetaPoco
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之間的差距。它幫助您簡化在開發過程中何時使用基本操作和高階操作的切換。
- 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。
Insight.Database
Insight.Database是一個用於 .NET 的快速、輕量級的 micro-orm。
cyqdata
cyq.data是一個高效能且功能最強大的orm(支援.NET Core),支援Txt、Xml、Access、Sqlite、Mssql、Mysql、Oracle、Sybase、Postgres、DB2、Redis、MemCache。
- GitHub地址:https://github.com/cyq1162/cyqdata
querybuilder
SQL 查詢構建器,用 c# 編寫,幫助您輕鬆構建複雜的查詢,支援 SqlServer、MySql、PostgreSql、Oracle、Sqlite 和 Firebird。
- 官網地址:https://sqlkata.com/
- GitHub地址:https://github.com/sqlkata/querybuilder
TinyORM
TinyORM是一個簡單、快速且安全的微型.NET ORM。
- Wiki地址:https://github.com/sdrapkin/SecurityDriven.TinyORM/wiki
- GitHub地址:https://github.com/sdrapkin/SecurityDriven.TinyORM
加入DotNetGuide技術交流群
1、提供.NET開發者分享自己優質文章的群組和獲取更多全面的C#/.NET/.NET Core學習資料、影片、文章、書籍,社群組織,工具和常見面試題資源,幫助大家更好地瞭解和使用 .NET技術。
2、在這個群裡,開發者們可以分享自己的專案經驗、遇到的問題以及解決方案,傾聽他人的意見和建議,共同成長與進步。
3、可以結識更多志同道合的開發者,甚至可能與其他開發者合作完成有趣的專案。透過這個群組,我們希望能夠搭建一個積極向上、和諧友善的.NET技術交流平臺,為廣大.NET開發者帶來更多的價值。