四种orm框架的对
1、什么是ORM?
答:ORM(Object-relational mapping)即对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。也就是说,ORM是通过使用描述对象和数据库之间映射的元数据(映射文件信息),将程序中的对象自动持久化到关系数据库中。说白了就是将相应的实体映射到相应的数据库表,然后使用orm框架封装好的api进行数据库访问,减少了自己写数据库访问类的步骤。
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没有批量修改、删除的方法,如下代码片段:
注解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
来源:oschina
链接:https://my.oschina.net/u/4713473/blog/4913654