SqlSugar和Freesql ( EF Core ) 性能比较 .NET ORM

别来无恙 提交于 2021-01-19 19:10:29

四种orm框架的对 

1、什么是ORM?

答:ORM(Object-relational mapping)即对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。也就是说,ORM是通过使用描述对象和数据库之间映射的元数据(映射文件信息),将程序中的对象自动持久化到关系数据库中。说白了就是将相应的实体映射到相应的数据库表,然后使用orm框架封装好的api进行数据库访问,减少了自己写数据库访问类的步骤。

img

2、ORM框架的优缺点是?

答:ORM框架的优点:(1)操作简单,提高开发效率。(2)支持面向对象封装。(3)可移植。(4)减少重复性代码

​ ORM框架的缺点:(1)处理多表联查之类的查询时,ORM的语法会变得很复杂。(2)执行性能较低(但现在有一些轻型ORM框架,性能接近原生SQL)。

2、四种框架的基本信息对比如下表:

框架/对比属性 SqlSugar Dos.ORM Freesql EFCodeFirst
支持数据库类型 MySql、SqlServer、Sqlite、Oracle 、 postgresql MySql、SqlServer、Sqlite、Oracle 等数据库 MySql、SqlServer、Sqlite、Oracle 、 postgresql MySql、SqlServer、Sqlite、Oracle 、 postgresql
支持的平台版本 .net和net core .net和net core .net和net core .net和net core
团队规模 公司性质 公司性质 个人 微软
体积 895k(下载后package的大小) 607k(下载后package的大小) 558k(下载后package的大小) 17.8M
文档帮助 较全(install后,就可以直接使用了) 一般(但是很多细节的东西并没有告知用户,例如需要通过代码生成器生成的实体类才能与数据库进行映射) 较全(install后,创建数据库即可直接使用) 较全(无论是微软官方还是百度谷歌,用的人比较多,遇到问题容易)
与数据库交互方式 支持dbfirst、codefirst 支持dbfirst 支持dbfirst、codefirst 支持code first(当前使用的是code first,也可支持dbfirst)
学习成本 一般 较高(刚开始使用会遇到许多的bug,虽然网上都有解决方法,但是学习起来没前几种容易)

3、四种框架的耗时情况如下:

如下表格,展示的是四种ORM框架Crud的性能,其中,(1)增查删改都是循环5次,每次增删改1万条数据,查询是每次查询10万条数据,取5次的平均值;(2)批量增删改都是循环5次,每次增删改10万条数据,取5次平均值:

类别/框架名称 Freesql(单位:秒) DOS.ORM(单位:秒) EF(Code First)(单位:秒) SqlSugar(单位:秒)
新增(Insert) 13.9063 13.5712 273.563 12.4268
删除(Delete) 13.6688 13.3366 65.1328 12.4202
修改(Update) 14.3704 14.3306 54.021 12.084
查询(Select) 1.7502 0.2308 0.5486 0.1416
批量新增(BulkInsert) 1.4382秒 20.6162秒 27.6674秒 1.4286秒
批量修改(BulkUpdate) 3.5988秒(不足以用来参照,看下面注解) 22.6556秒 22.1634秒 3.8188秒
批量删除(BulkDelete) 0.7504秒(不足以用来参照,看下面注解) 只能批量删除2009条,超过就报错 20.336秒 0.7034秒

由上表可知,各种框架CRUD的性能如下(由快到慢):

(1)循环CRUD操作的性能如下:

​ 新增:SqlSugar>DOS.ORM>Freesql>EF

​ 删除:SqlSugar>DOS.ORM>Freesql>EF

​ 修改:SqlSugar>DOS.ORM>Freesql>EF

​ 查询:SqlSugar>DOS.ORM>EF>Freesql

综上可知:SqlSugar框架的CRUD性能是最高的,其中EF除了查询比较快之外,删改所花费的时间都是其他三种框架的4~5倍,而新增就是20倍左右!

(2)循环批量CRUD的性能如下:

​ 批量新增:Freesql=SqlSugar>DOS.ORM>EF

​ 批量修改:Freesql=SqlSugar>EF>DOS.ORM

​ 批量删除:Freesql=SqlSugar>EF

注解1:Freesql是有批量新增的方法BulkInsert,故其批量新增操作与其他框架一样。但是,Freesql没有批量修改、删除的方法,如下代码片段:

//下面的n表示1~5,是循环执行的次数,在上面的Insert步骤中分配插入了1万条"Freesql测试的数据1"、"Freesql测试的数据2"、"Freesql测试的数据3"、"Freesql测试的数据4"、"Freesql测试的数据5"
//Freesql只能通过lamdba表达式匹配到的数据进行删改,而不能直接在update()中添加一个list
context.Update<ORMTest>(a => a.Name == "Freesql测试的数据" + n, a => new ORMTest()
                    {
                        Name = "Freesql修改的数据" + n
                    });
context.Delete<ORMTest>(a => a.Name == "Freesql修改的数据" + n);

 

注解2:DOS.ORM批量删除超过2009条数据时就会报错,如下图:

综上,只有SqlSugar涵盖的方法比较多,而且速度也较快!

4、四种框架都支持哪些功能?

功能/框架 Freesql DOS.ORM EF SqlSugar
增删查改 支持 支持 支持 支持
批量增删改 支持 支持 支持 支持
事务、存储过程、日志 支持 支持 支持 支持
lamdba、执行SQL 支持 支持 支持 支持
linq 支持 不支持 支持 不支持
多表查询、分组查询 支持 支持 支持 支持
全局过滤器 支持 不支持 支持 支持
联表子查询 不支持 不支持 支持 支持
查询返回格式 一般 一般 比较多 比较多

答:四种框架都支持:

基本查询、多表查询、分组查询、批量增删改操作、存储过程、事务、执行SQL、日志等功能。

5、就个人使用而言,比较推荐哪个框架?

答:个人比较推荐SqlSugar,原因如下:

(1)只要下载了SqlSugar包后,就可以直接按照官网的例子进行编码,日志跟踪方面我认为是最简单已用的,且文档写得比较好、可由代码生成数据库,可以快速上手。

(2)Freesql与SqlSugar差不多,但是由于我觉得SqlSugar日志跟踪方面做得比较好且可以由代码生成数据库,且Freesql对批量操作的支持不是很好,只能批量新增(且没有返回值),不能批量删除、修改,所以我才选择SqlSugar:

(3)Dos.ORM是这三个框架里面最不好上手,***不能***直接自己创建类文件,而是需要下载官网推荐的***代码生成器***去生成相应的类,然后才能进行数据库的访问,否则插入删除等操作都会报错,所以就个人而言,不推荐用这个,认为学习成本比其他两个高。

(4)EF是重量级ORM框架,上面三种框架有的功能它都有,且有微软这个大厂在背后支撑,百度谷歌可以轻易搜索到大多数问题的解决方法,一开始,只要修改类结构,容易遇到与"dbo.Migrationary"相关的错误(这是需要了解codefirst数据库迁移方面的知识,可通过这边文章了解https://blog.csdn.net/xwnxwn/article/details/90171519),如果想用的功能不多,且不想框架太大的话,就还是推荐上面三种。

(5)四种框架中,SqlSugar进行CRUD的性能最高,而EF最慢。

 

更多优秀开源框架:

 

.NET 5企业级框架Furion   

Gitee:https://gitee.com/monksoul/Fur

GitHub:https://github.com/monksoul/Fur

Docker:https://hub.docker.com/r/monksoul/fur

BCVP(Blog.Core&Vue Project) 

开箱即用的企业级前后端分离【 .NET Core3.1 Api + Vue 2.x + RBAC】权限框架。

github: https://github.com/anjoy8/Blog.Core

通用后台+权限+菜单

Meiam.System - NET Core 3.1 WebAPI + Vue 2.0 + RBAC 

github: https://github.com/91270/Meiam.System

演示地址: https://demo.meiam.top/

开源免费WMS仓库管理系统

KopSoft仓库管理系统 ​http://wms.kopsoft.cn/
Gitee: ​https://gitee.com/yulou/KopSoftWms
GitHub: ​https://github.com/lysilver/KopSoftWms

.NET Core 微服务 快速开发框架 Viper

github: https://github.com/duyanming/Viper

文档地址: https://duyanming.github.io/

体验地址:  http://140.143.207.244/  用户为anno 密码123456 

 

飞易腾网络 / FytSoaCms

Gitee:https://gitee.com/feiyit/FytSoaCms

GitHub:https://github.com/feiyit/FytSoaCms

服务全家桶FamilyBucket应用框架

是一个集合多个组件应用形成的微服务一体化的全套应用框架。

各组件源码: https://github.com/q315523275/FamilyBucket

UI源码: https://github.com/q315523275/FamilyBucket-UI

部分服务源码: https://github.com/q315523275/FamilyBucket-Server

博客园地址:

https://www.cnblogs.com/tianxiangzhe/p/10212337.html

APIJSON.NET

后端接口和文档自动化,前端(客户端) 定制返回JSON的数据和结构!

github地址:https://github.com/liaozb/APIJSON.NET

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!