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: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 實現想法,歡迎給作者留言討論,謝謝觀看!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章