EF:重量级ORM的代表

优点:

1、不关心sql怎么写,

2、开发速度快,和linq结合,有效提高开发效率

3、code first,代码优先,不用关心数据库结构,代码先行。

4、跨数据库,只需要把连接字符串改一下就可成功切换数据库

5、与vs结合的比较好。

缺点:

1.比较复杂,学习曲线大。

  2.不适合统计查询系统,效率不是很高。

  3.对于多表联查,一些复杂的查询实现比较复杂和困难,而且有可能要借助其他方案来实现。

  4.自动生成的sql查询效率略低(效率低,数据量达到一定量级比较明显)

  5.对于大量数据,高负载场景需要慎重使用。

  6.实现良好的耳机缓存很困难,并且只能定制。

  7.EF的Context上下文不是线程安全的,开发人员切记不应该在整个Service上使用一个Context上下文。

  8.EF的性能表现比较一般。性能不如ADO,无法控制SQL语句的生成,频繁的插入操作不适用,EF不支持大数据Bulk插入。

Dapper:轻量级ORM的代表

优点:

  1.开源,轻巧,单文件,上手容易  

  2.支持主流的关系型数据库,如SQLserver,MySql,Oracle等。

  3.执行的效率高,Dapper的速度和原生的IDateReader接近,取列表的数据甚至超过了DateTable。Dapper的原理通过Emit反射IDataReader的序列队列来凯苏得到和产生对象。

缺点:

  1.半自动的ORM,需要开发人员自己写实体

  2.开发的世界成本高,较弱的LINQ支持

  3.维护成本高,不支持code FIrst.开发人员除了维护好数据库中的表,还得维护好代码中表的映射对象。

EF和Dapper结合使用:

1、Dapper是半自动的ORM,需要开发人员自己写实体,但是和EF结合后实体部分可以由EF来完成。

2、Dapper开发成本高,叫若的linq支持,但是EF和linq结合的非常好,且不用写sql,有效提高开发效率。

3、EF对于多表联查,一些复杂的查询实现比较复杂和困难,而且有可能要借助其他方案来实现(比如联合查询从表属性在主表实体里设为[NotMapped],查询出来的内容从表属性值为null,可以再写个包含全部属性的实体来解决这个问题,但是过程太过麻烦),

因此这个时候Dapper该上场了! (  dbcontext.Database.Connection.Query<T> ) 完美解决这个问题。

4、传参;利用dapper 的DynamicParameters动态参数查询,结合dapper的dbcontext.Database.Connection.Query<T> (不用string.format()).

dp.Add(key, value) ;   sql里用@key 。传参

EF和dapper的更多相关文章

  1. EF和Dapper之争的关键

    突然发现园子里为EF和Dapper的事闹翻了天.(学Java的同学大概就是Hibernate和MyBatis之争了) 讲到EF对Mysql的支持,我在一边偷着乐:还好我用的是NHibernate,对M ...

  2. .NET Core、EF、Dapper、MySQL 多种方式实现数据库操作(动态注册实体类)

    目录 前言 一.技术选型 二.遇到的坑 2.1..NET Core 下 EF 的问题 2.2.数据库实体类的注册 切记坑 前言 最近在学习.研究 .NET Core 方面的知识,动手搭建了一些小的 D ...

  3. EF架构~Dapper.Contrib不能将Linq翻译好发到数据库,所以请不要用它

    回到目录 对于Dapper是一个轻量级的数据访问框架,而需要使用者去自己做SQL,它,只是一个数据访问者! 对些,Dapper推出了Contrib扩展包,它可以友好的让开发人员使用linq,而不需要写 ...

  4. EF、Dapper、NHibernate等ORM框架的比较及优缺点

    什么是ORM? ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操 ...

  5. 同时支持EF+Dapper的混合仓储,助你快速搭建数据访问层

    背景 17年开始,公司开始向DotNet Core转型,面对ORM工具的选型,当时围绕Dapper和EF发生了激烈的讨论.项目团队更加关注快速交付,他们主张使用EF这种能快速开发的ORM工具:而在线业 ...

  6. 用事实说话,成熟的ORM性能不是瓶颈,灵活性不是问题:EF5.0、PDF.NET5.0、Dapper原理分析与测试手记

    [本文篇幅较长,可以通过目录查看您感兴趣的内容,或者下载格式良好的PDF版本文件查看] 目录 一.ORM的"三国志"    2 1,PDF.NET诞生历程    2 2,Linq2 ...

  7. 你是否还在质疑EF的性能

    1. 写在前面的话 一直没有写博客的习惯,感觉太浪费时间,没有那么多精力,其实仔细一想,写博客是一种习惯,也是一种心境,同时也是对自己所掌握的知识结构的一个梳理过程,对自己知识体系的一个巩固,同时也是 ...

  8. 关于Dapper.NET的相关论述

    年少时,为何不为自己的梦想去拼搏一次呢?纵使头破血流,也不悔有那年少轻狂.感慨很多,最近事情也很多,博客也很少更新了,毕竟每个人都需要为自己的生活去努力. 最近在一个群里遇到一个人说的话,在这里不再赘 ...

  9. EF通用数据层封装类(支持读写分离,一主多从)

    浅谈orm 记得四年前在学校第一次接触到 Ling to Sql,那时候瞬间发现不用手写sql语句是多么的方便,后面慢慢的接触了许多orm框架,像 EF,Dapper,Hibernate,Servic ...

  10. ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法

    一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relatio ...

随机推荐

  1. DVWA靶场实战(十一)——XSS(Reflected)

    DVWA靶场实战(十一) 十一.XSS(Reflected): 1.漏洞原理: XSS被称为跨站脚本攻击(Cross Site Script),而Reflected被称作反射型XSS.不同于DOM和S ...

  2. GitHubDesktop推送报错“SSL/TLS connection failed”如何解决

    哈喽大家好,今儿提交Git的时候遇到个问题,查看了一会儿,算是解决了.这里记录一下,方便日后查看.和帮助到大家. 这篇博客后续会陆陆续续的更新内容,只要我遇到问题了,就会发上来. 报错内容: fata ...

  3. vue学习笔记(五)---- vue动画

    官方文档:https://cn.vuejs.org/v2/guide/transitions.html 一.使用过度类名 没有使用动画之前: <body> <div id=" ...

  4. Node.js学习笔记----day05(MongonDB详情)

    认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.es6中的find() 方法的原理 EcmaScript 6 对数组新增了很多方法 比如,find find 接收一个方法作为参数,方法内 ...

  5. python字符串表达式求值

    背景: 在开发的过程中涉及到动态的根据公式计算数值 技术上选择了python a= eval("1+2*(3+1)") print(a)

  6. ChatGPT:好家伙,每个人内心的一块魔镜

    这几天最火的话题就是ChatGPT,人人都在聊,人人都在社交圈或者vlog里面分享使用ChatGPT的聊天截图. 众生有众生相,每个人对这个AI工具有不同的感受和反应.我个人是非常接受ChatGPT, ...

  7. 力扣---1306. 跳跃游戏 III

    这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处.当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]. 请你判断自己是否能够跳到对应元素值 ...

  8. Vue21 组件

    1 模块及组件简介 组件(component)是vue.js最强大的功能之一.组件的作用就是封装可重用的代码,通常一个组件就是一个功能体,便于在多个地方都能够调用这个功能体. 每个组件都是Vue的实例 ...

  9. PopClip使用教程图文详解 2022.12亲测有效

    PopClip简介 PopClip mac版是Macos上一款增强型复制粘贴工具,当你选中文字后,PopClip会自动弹出复制.剪切.粘贴.搜索等等操作,除了复制粘贴外,PopClip还提供了很多的扩 ...

  10. Vue框架-03:JS的几种循环方式,Key值的解释,数组/对象的检测与更新,input事件,v-model数据双向绑定,过滤案例,事件修饰符,按键修饰符,表单控制

    目录 前端开发之Vue框架 一.JS循环的几种方式 1.v-for可循环的变量 2.js的循环方式 二.Key值的解释 三.数组.对象的检测与更新 四.input事件 五.v-model双向数据绑定 ...