2020年 .NET ORM 完整比較、助力選擇

nicye發表於2020-09-14

.NET ORM 前言

為什麼要寫這篇文章?

希望針對 SEO 優化搜尋引擎,讓更多中國人知道並且使用。目前百度搜尋 .NET ORM 全是 sqlsugar,我個人是無語的,每每一個人進群第一件事就是拿來比較,每天要重複回答、重複解答、說服他們。想說服標籤是名氣大、使用者多的同型別 .NET ORM 非常困難,最多隻能讓他們勉強接受。FreeSql 不願做自己發光的金子,希望在 2020年 寫下這篇完整一點的 .NET ORM 比較,為準備使用 FreeSql 的朋友解惑,能排上百度搜尋引擎當然再好不過了。

肯請正在使用 CSRedisCore、FreeSql 的朋友,動一動手指轉發本文,並加上原文連結指向本文,謝謝! QQ群:4336577(已滿)、8578575(線上)、52508226(線上)

原創文章歡迎轉載,2020年中文版 .NET ORM 完整功能比較

MarkDown:https://files.cnblogs.com/files/kellynic/ORM_VS.zip

文章連線:https://www.cnblogs.com/kellynic/p/13664720.html

.NET ORM 基礎資訊比較

功能項 FreeSql EFCore SqlSugar
出生時間 2018年12月 2015年(約) 2014年(約)
開源協議 MIT Apache-2.0 Apache-2.0
所屬機構 dotnetcore(NCC) dotnet sunkaixuan(個人)
單元測試數量 5500+ 很多
github star 2.1k+ 9.5k+ 3.1k+
github issues 活躍 活躍 不活躍
支援平臺 .NET4.0+、.NETCore .NETCore .NET4.5+、.NETCore
支援資料庫 很多,並且行為一致 很多 SqlServer/MySql/Sqlite/Oracle
生命週期 Singleton Scoped Scoped
使用方式 IFreeSql、Repository DbContext SugarClient

FreeSql .NET ORM 支援 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/達夢/人大金倉/神舟通用/Access。

.NET ORM 各有自已看家本領,本文主要按 FreeSql 提供的功能進行列舉比較,如有冒犯請見諒,也歡迎向 FreeSql 提出功能建議。

每個功能實現的深度層次不一樣(比如 EFCore 支援 SqlServer 2012,FreeSql 支援 SqlServer 2005),很難徹底比較,提示:

  • 本文比較的功能 FreeSql 每種資料庫基本都有提供,不像 EFCore 偏向 SqlServer
  • 本文只比較官方提供的功能(不包含第三方擴充套件)

.NET ORM 整體功能比較

功能項 FreeSql EFCore SqlSugar
.NET ORM CodeFirst 根據實體型別,建立表結構
.NET ORM CodeFirst 根據實體型別,對比表結構 -
.NET ORM CodeFirst 根據實體型別註釋,遷移表結構備註 - -
.NET ORM CodeFirst FluentApi -
.NET ORM CodeFirst FluentApi 語法相容 EFCore -
.NET ORM CodeFirst 實體特性相容 EFCore -
.NET ORM CodeFirst 自定義實體特性(Aop) -
.NET ORM CodeFirst 型別轉換對映(MapType) -
.NET ORM DbFirst 根據資料庫,生成實體類
.NET ORM 導航屬性(OneToOne) -
.NET ORM 導航屬性(ManyToOne) -
.NET ORM 導航屬性(OneToMany) -
.NET ORM 導航屬性(ManyToMany) - -
.NET ORM 導航屬性(Parent) 父子關係的實體類 - -
.NET ORM 導航屬性延時載入、貪婪載入、級聯儲存 -
.NET ORM 自定義表示式樹解析 - -
.NET ORM 全域性過濾器 -
.NET ORM 事務
.NET ORM 讀寫分離 -
.NET ORM 分表分庫 - -
.NET ORM 倉儲 Repository - -
.NET ORM 工作單元 UnitOfWork - -
.NET ORM 工作單元管理器 UnitOfWorkManager - -
.NET ORM DbContext 狀態管理 -

.NET ORM CRUD 功能比較

功能項 FreeSql EFCore SqlSugar
.NET ORM CRUD 時,對映動態表名 -
.NET ORM CRUD 時,使用引數化 SQL 執行
.NET ORM CRUD 時,不使用引數化 SQL 執行(NoneParameter) - -
.NET ORM CRUD 時,獲取對應的 SQL(ToSql) -
.NET ORM CRUD 時,統一審計實體屬性值(Aop.AuditValue) - -
.NET ORM 插入(單條)
.NET ORM 插入時,忽略/指定列 -
.NET ORM 插入時,返回影響的行數 -
.NET ORM 插入時,返回插入後的自增值
.NET ORM 插入時,返回插入後的記錄 - -
.NET ORM 插入時,Insert Ignore Into - -
.NET ORM 插入時,On Duplicate Key Update - -
.NET ORM 插入時,On Conflict Do Update - -
.NET ORM 批量插入 效能測試結果參考文件 -
.NET ORM 批量插入時,自動分批 參考文件 - -
.NET ORM 批量插入時,使用BulkCopy - -
.NET ORM 更新(單條)
.NET ORM 更新時,動態條件(WhereDynamic) -
.NET ORM 更新時,根據實體物件更新 -
.NET ORM 更新時,根據狀態管理只更新有變化的屬性 -
.NET ORM 更新時,忽略/指定列 -
.NET ORM 更新時,原子性 set num=num+1 -
.NET ORM 更新時,指定條件 -
.NET ORM 更新時,自動附加全域性過濾器條件 - -
.NET ORM 更新時,不需要先查詢 -
.NET ORM 更新時,使用樂觀行鎖 -
.NET ORM 更新時,使用悲觀鎖 - -
.NET ORM 更新時,返回影響的行數 -
.NET ORM 更新時,返回插入後的記錄 - -
.NET ORM 批量更新 - -
.NET ORM 刪除(單條)
.NET ORM 刪除時,動態條件(WhereDynamic) -
.NET ORM 刪除時,指定條件 -
.NET ORM 刪除時,自動附加全域性過濾器條件 - -
.NET ORM 刪除時,不需要先查詢 -
.NET ORM 刪除時,返回影響的行數 -
.NET ORM 刪除時,返回插入後的記錄 - -
.NET ORM 級聯儲存 -
.NET ORM 新增或更新 -
.NET ORM 新增或更新,自動適配 merge into 參考文件 - -
.NET ORM 批量編輯儲存 參考文件 -
.NET ORM 查詢(單條)
.NET ORM 查詢時,分頁
.NET ORM 查詢時,分頁支援 SqlServer2008 -
.NET ORM 查詢時,動態條件(WhereDynamic) -
.NET ORM 查詢時,動態過濾條件(WhereDynamicFilter) 參考文件 -
.NET ORM 查詢時,自動附加全域性過濾器條件 - -
.NET ORM 查詢時,多表條件傳播(WhereCascade) - -
.NET ORM 查詢時,在 lambda 中使用導航屬性 -
.NET ORM 查詢時,用 Dto 對映只需要查詢的欄位 - -
.NET ORM 查詢時,傳 Sql 作二次查詢(WithSql) -
.NET ORM 查詢時,子查詢(Exists) -
.NET ORM 查詢時,子查詢(In) -
.NET ORM 查詢時,子查詢拼接結果(string.Join) 參考文件 - -
.NET ORM 查詢時,使用分組聚合(GroupBy/Having)
.NET ORM 查詢時,使用 Linq To Sql 語法 -
.NET ORM 查詢時,針對樹形結構表 父子關係的實體類 - -

.NET ORM 總結

.NET ORM FreeSql 功能強大,擴充套件方便,從 issues 和 qq群 可以看得出社群更新極積有問必應;

.NET ORM EFCore 主要是物件導向操作,許多方式不符合中國人習慣,長期更新(但不友好相容);

.NET ORM SqlSugar 歷史問題多,並且 issues 和 qq群 已經基本不解決問題;


.NET ORM FreeSql 作者的努力希望能打動到你,肯請正在使用的、善良的您能動一動小手指,把文章轉發一下,讓更多人知道 .NET 有這樣一個好用的 ORM 存在。謝謝了!!

.NET ORM FreeSql 開源協議 MIT https://github.com/dotnetcore/FreeSql,可以商用,文件齊全。QQ群:4336577(已滿)、8578575(線上)、52508226(線上)

如果你有好的 ORM 實現想法,歡迎給作者留言討論,謝謝觀看!

相關文章