企业应用架构研究系列十三:整合EFCore&Dapper 通用ORM框架EFDapper
EntityFrameworkCore是微软官网提供的ORM框架,是轻量化、可扩展、开源和跨平台的数据访问技术框架,但是在.Net 开发圈的评论却褒贬不一。很多人认为EFCore 执行的效能比较差,很多复杂的查询场景很难实现,也有很多人认为,EFCore 开发简单,在中小型项目中,能够快速的实现业务逻辑。
我个人认为,EFCore一直在不断的升级,社区反馈的问题也在逐一的去努力解决,EFCore应该是一个可以信任,可以在项目中放心使用的框架。特别是EFCore7.0出来后,提供的对JSON的支持,让我更加确信EFCore是一个优秀的ORM框架。我对其的一些优秀的功能进行总结:(1)首先,EFCore 的对象模型管理还是非常严谨,基本上将对象的关系和数据库的表的关系管理的非常到位,保证数据的纯净,并且可以进行连带的统一移除,这点是非常不错的;(2)其次,EFCore 提供了数据的变更管理,通过Migration工具将对象的变更和数据库的变更高效的进行了自动化的管理,特别是在产品软件开发过程中,提供了一键式部署提供了非常方便的支持。(3)EFCore 的对Linq 的支持力度是非常大的,能够快速的进行应用程序的开发。(4)EFCore 的后续版本对异步操作和性能提升方面,也做了很大的升级,(5)特别是EFCore7 版本支持了JSON功能,这个是对一些灵活的动态属性或者子表可以简化了数据库的变更,更好的适应非结构化数据存储。(6)种子数据的管理,方便产品型软件在程序首次启动时候,初始化一些原始的配置数据。…… 其实还有很多优秀的功能,我本次也不在熬述。
但EFCore 目前在一些查询和特殊的SQL语句的执行过程中,支持的不是特别好,性能也不是特别优秀。这个时候,我们需要引入另外一个ORM插件,Dapper,号称性能之王的ORM框架,在性能方面的确是非常非常优秀,功能也是很强大,支持的生态圈也是很丰富的。而且在.Net 开发圈内是非常受欢迎的。在这里,也不在介绍Dapper的优秀功能,可以参考官网:https://dapper-tutorial.net ,官网说明的非常清楚而且很详细。
当在进行全新软件架构选型数据处理层插件的时候,很让我头疼,是选择EFCore 还是Dapper 呢?经过一番折腾,我觉得两个插件其实是可以互相弥补彼此不足,发扬插件彼此的优秀能力,将两个插件高效融合在一起。基于这个思路,我开发了一个新的结合体数据访问层框架EFDapper,本着最简设计思路,在DbContext上面进行功能绑定,如下图,我们就可以将Dapper的 高效的查询功能和EFCore 进行了高效融合了。
EFDapper 的使用是非常简单,就是EFCore 的功能和Dapper 的功能的合体,通过EFCore 的DbContext 的上下文,获取数据库连接信息,然后就可以扩展到Dapper 功能框架了,完美的结合了两个数据访问层框架。
目前EFDapper 框架还没有开发成熟,后续计划在两框架之间,可以开发一些优秀功能,也希望EFCore 和Dapper 框架越来越优秀。
企业应用架构研究系列十三:整合EFCore&Dapper 通用ORM框架EFDapper的更多相关文章
- 企业应用架构研究系列二十八:身份认证 Beginning Out With IdentityServer4
在.Netcore 技术栈中,一直在使用了开源组件IdentityService4进行身份管理,其功能的强大和易用性的确很受开发者喜欢,但是最近其开源组织Duende Software 开始对其进行商 ...
- 企业应用架构研究系列二:MSF&Scrum 项目管理
从业软件项目这么多年,在企业应用开发项目中,项目能否成功,是否能按照项目计划有效的推进,是有很强的一套项目管理理论.最早的时候,接触的项目管理的方法论就是微软的MSF(Microsoft Soluti ...
- 企业应用架构研究系列十九:Docker开发环境
软件行业流行这样一个说法,由于Docker 技术的成熟和该技术被广大厂商的普遍应用,成就了微服务领域的快速成长,衍生了云原生技术和公有云的进一步推广.我个人认为Dockers 技术.微服务技术.云原生 ...
- 企业应用架构研究系列二十七:Vue3.0 之环境的搭建与Vue Antd Admin探索
开发前端需要准备一些开发工具,这些工具怎么安装就不详细描写了,度娘一些很多很多.主要把核心的开发工具列表一些,这些资源也是非常容易找到和安装的. Node 安装:https://nodejs.org/ ...
- 企业应用架构研究系列二十六:信号量SemaphoreSlim与Semaphore
在进行多线程程序的开发和设计的过程中,不可避免的需要引入semaphore信号量这个组件,这是.net框架提供的一个对多线程计数互斥的方案,就是允许指定的线程个数访问特定的资源而增加的 一个" ...
- ABP架构学习系列四:集成Dapper
之前,一直想集成Dapper到项目中,但是一直没成功,今天把abp升级到最新版,然后按教程来,就可以了,呵呵 现在,基于上一篇的源码进行升级和集成dapper,将abp升级到3.8.2 官方 ...
- hisql ORM 框架研究(国内第一个支持HANA的ORM框架)
HiSql 操作说明文档 V1.0 下一代ORM框架 国内第一个支持HANA的ORM框架 hisql源码下载 git clone https://github.com/tansar/HiSql.git ...
- 企业架构研究总结(36)——TOGAF企业连续体和工具之企业连续体构成及架构划分
又回头看了之前文章的评论,本人也同样感慨这些文章的确像政治课本般的虚无缥缈,所以对费力看完却觉得无从下手的看官致以诚挚的歉意和理解,因为这个问题也同样困扰着笔者本人,而我能做的也只能是纸上谈兵.之前也 ...
- 企业架构研究总结(39)——TOGAF架构能力框架之架构委员会和架构合规性
3. 架构委员会 正如前面所说,一个用来对架构治理策略的实现进行监督的跨组织的架构委员会是架构治理策略成功的主要要素之一.架构委员会应该能够代表所有主要干系人的需求,并且通常还需要对整个架构的审查及维 ...
- 企业架构研究总结(38)——TOGAF架构能力框架之架构能力建设和架构治理
为了确保架构功能在企业中能够被成功地运用,企业需要通过建立适当的组织结构.流程.角色.责任和技能来实现其自身的企业架构能力,而这也正是TOGAF的架构能力框架(Architecture Capabil ...
随机推荐
- Python 根据两个字段排序 中文排序 汉字排序 升序 降序
Python3写法 代码 # -*- coding: utf-8 -*- # 需求:年龄倒序,姓名正序 from itertools import chain from pypinyin import ...
- Python爬虫requests请求库
requests:pip install request 安装 实例: import requestsurl = 'http://www.baidu.com'response = requests. ...
- Java开发学习(三十九)----SpringBoot整合mybatis
一.回顾Spring整合Mybatis Spring 整合 Mybatis 需要定义很多配置类 SpringConfig 配置类 导入 JdbcConfig 配置类 导入 MybatisConfig ...
- beego学习———安装bee
Bee安装 有各种坑,一会儿GOPATH的问题,一会儿局部的问题了 唉,搞了一个小时 很重要的问题!!!!!!!!!!!! beego的bee工具只能强制新建项目在GOPATH/src目录下 虽然在别 ...
- 你不知道的React Developer Tools,20 分钟带你掌握 9 个 React 组件调试技巧
壹 ❀ 引 React Developer Tools 是 React 官方推出的开发者插件,可以毫不夸张的说,它在我们日常组件开发中,对于组件属性以及文件定位,props 排查等等场景都扮演者至关重 ...
- 动态爱心-详细教程(小白也会)(HTML)
动态爱心 超级超级超级简单!!!赶紧做给你们的"Ta"看吧! (最后有详细步骤) 视频效果: 话不多说直接上代码 点击查看代码 <!DOCTYPE HTML PUBLIC & ...
- 记录一次Oracle导入数据库失败的解决办法,最终报错:UDI-04045、ORA-04045、ORA-01775
费了很大的工夫,终于解决了.做个记录. ******************************************************************************** ...
- promise 的串行执行
function pri (num) { return new Promise((resolve,reject) => { console.log('开始'+num) res ...
- java学习之spirng的aop
AOP技术 0x00前言 什么是AOP技术:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的 ...
- 嵌入式-C语言基础:快速选择排序实现从大到小排序
#include<stdio.h> int main() { /*简单选择排序:从大到小:一共比较sizeArr-1轮,每一轮的第一个数是arr[i],第一个数依次和它后面的每个数比较*/ ...