天天看點

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
所屬機構 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
使用方式 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
  • 本文隻比較官方提供的功能(不包含第三方擴充)
2020年 .NET ORM 完整比較、助力選擇
2020年 .NET ORM 完整比較、助力選擇
2020年 .NET ORM 完整比較、助力選擇

.NET ORM 整體功能比較

.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 功能比較

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