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

.NET ORM 前言

為什麼要寫這篇文章?

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

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

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

MarkDown://www.cnblogs.com/kellynic/p/13664720.md

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

.NET ORM 基礎信息比較

功能項 FreeSql EFCore SqlSugar
出生時間 2018年12月 2015年(約) 2014年(約)
開源協議 MIT Apache-2.0 Apache-2.0
所屬機構 dotnet sunkaixuan(個人) dotnetcore(NCC)
單元測試數量 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 //github.com/dotnetcore/FreeSql,可以商用,文檔齊全。QQ群:4336577(已滿)、8578575(在線)、52508226(在線)

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