.NET ORM 前言

为什么要写这篇文章?

希望针对 SEO 优化搜索引擎,让更多中国人知道并且使用。目前百度搜索 .NET ORM 全是 sqlsugar,我个人是无语的,每每一个人进群第一件事就是拿来比较,每天要重复回答、重复解答、说服他们。想说服标签是名气大、使用者多的同类型 .NET ORM 非常困难,最多只能让他们勉强接受。FreeSql 不愿做自己发光的金子,希望在 2020年 写下这篇完整一点的 .NET ORM 比较,为准备使用 FreeSql 的朋友解惑,能排上百度搜索引擎当然再好不过了。

肯请正在使用 CSRedisCore、FreeSql 的朋友,动一动手指转发本文,并加上原文链接指向本文,谢谢! QQ群:4336577(已满)、8578575(在线)、52508226(在线)

原创文章欢迎转载,2020年中文版 .NET ORM 完整功能比较

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

文章连接:https://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 https://github.com/dotnetcore/FreeSql,可以商用,文档齐全。QQ群:4336577(已满)、8578575(在线)、52508226(在线)

如果你有好的 ORM 实现想法,欢迎给作者留言讨论,谢谢观看!

2020年 .NET ORM 完整比较、助力选择的更多相关文章

  1. python全栈开发day60-django_app ORM 完整登录案例

    day60 内容回顾: 1. HTTP协议: 1.请求(浏览器发给服务端的消息——request) 请求方法 URL 协议版本\r\n k1:v1\r\n k2:v2\r\n \r\n 请求体 —— ...

  2. Mego(03) - ORM框架的新选择

    前言 从之前的两遍文章可以看出ORM的现状. Mego(01) - NET中主流ORM框架性能对比 Mego(02) - NET主流ORM框架分析 首先我们先谈下一个我们希望的ORM框架是什么样子的: ...

  3. ORM系列之一:Dos.ORM

    阅读目录 引言 1.为什么使用Dos.ORM 2.配置 3.开始使用 3.1. 物理表 3.2. 实体类 3.3. 使用方法 引言 Dos.ORM(原名Hxj.Data)于2009年发布,2015年正 ...

  4. SQL SERVER完整、差异和事务日志备份及还原(脚本和GUI实现) [原创]

    一.完整备份.差异备份和事务日志备份的脚本 --完整备份数据库 BACKUP DATABASE Test_Bak TO DISK = 'E:\20150609_75\bak\Test_bak_full ...

  5. sqlserver2008r2还原完整备份和差异备份及自动删除过期备份

    本文主要内容: 还原完整和差异备份 删除超过1个月的备份 注:保证SQL Server代理服务启动,并把服务设置为自动启动 完整备份和差异备份还原原理: 差异备份是完整备份的补充,只备份上次完整备份后 ...

  6. 使用Photoshop合成两张不完整的图片

    一.准备工作 软件环境:PhotoshopCS6 目标:将两张不完整的图片合并成一张完整的图片. 二.操作步骤 1,新建一张画布,参数:15*12厘米,像素300. 2,对第一张不完整的图片选择魔棒工 ...

  7. C# winform中 选择文件和保存文件

    转载自https://blog.csdn.net/qq_31788297/article/details/62047952 我们在使用桌面软件的时候经常会使用到选择文件并打开和另存为等的窗口,这样方便 ...

  8. Hibernate和IBatis对比

    [转自]http://blog.csdn.net/ya2dan/article/details/7396598 项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也 ...

  9. DB层面上的设计 分库分表 读写分离 集群化 负载均衡

    第1章  引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的 互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的 ...

随机推荐

  1. JavaScript 数组中根据某个属性值的中文进行排序

    普通排序 const arr = [] arr.sort((x, y) => x.prop - y.prop) 中文属性值排序 const arr = [] arr.sort((x, y) =& ...

  2. JavaScript - async/await 基础示例

    一个函数如果被 async 修饰,无论内部是否有 await的异步操作,都会返回一个 Promise 对象 demo 1 async function basicAsync() { let resul ...

  3. CodeReview 的经验和原则

    资深的程序员都知道 Code Review 可以对代码质量,代码规范,团队代码能力提升带来很大的提升,还有著名的技术专家"左耳朵耗子"也说过: 我认为没有 Code Review ...

  4. CVE-2020-0796“永恒之黑”漏洞复现

    0x00 漏洞概述 Microsoft Server Message Block 3.1.1(SMBv3)协议在处理某些请求的方式中存在代码执行漏洞.攻击者可以精心构造数据包发送到SMB服务器,无需经 ...

  5. Unix I/O

    Unix I/O 打开文件 一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备.内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标识这个文件.内核记录有关这个打开 ...

  6. 使用Kali中的Metasploit生成木马控制Windows系统

    一.概念:Kali基于debin的数字取证系统,上面集成了很多渗透测试工具,其前身是BT5 R3(BtackTrack). 其中Metasploit是一个综合利用工具,极大的提高了攻击者的渗透效率,使 ...

  7. Scala的安装和配置

    1.Windows下搭建Scala开发环境 1)Scala需要Java运行时库,安装Scala需要首先安装JVM虚拟机并配置好,推荐安装JDK1.8 2)在http://www.scala-lang. ...

  8. 多线程的指令重排问题:as-if-serial语义,happens-before语义;volatile关键字,volatile和synchronized的区别

    一.指令重排问题 你写的代码有可能,根本没有按照你期望的顺序执行,因为编译器和 CPU 会尝试指令重排来让代码运行更高效,这就是指令重排. 1.1 虚拟机层面 我们都知道CPU执行指令的时候,访问内存 ...

  9. Dubbo直连方式

    目录 一.dubbo概述 1. 基本架构 2. dubbo 支持的协议 二.直连方法 三.创建服务提供者 1. 思路 1. 创建maven web 2. pom.xml 3. 创建实体 4. 创建服务 ...

  10. ucore lab2

    CPU在如下时刻会检查特权级 访问数据段 访问页 进入中断服务例程(ISR) RPL位于段寄存器 DS ES FS GS CPL位于CS SS DPL位于段描述符表/门描述符 访问门时: CPL< ...