译文链接:https://www.infoworld.com/article/3025784/how-to-use-the-dapper-orm-in-c.html?nsdr=true

对象关系映射(ORM)这个概念已经存在很长时间了,ORM的作用就是用来解决 编程领域的 object model 和关系数据库中的 data model 的不匹配问题,Dapper 是一个开源的,轻量级的 ORM 框架,由 Stack Overflow 团队开发,Dapper 和其他流行的ORM框架相比,最大的优点就是羽翼级。

Dapper在最初开发时就考虑到了性能和易用性,它支持在 事务,存储过程 或者 批量插入时进行静态或者动态的对象绑定。

使用 Visual Studio 安装 Dapper ORM

要想了解 Dapper,从下面的步骤开始吧:

  1. 打开 Visual Studio

    1. 点击 文件 -> 新建  -> 项目

    1. 选择 网站 -> ASP.Net Web Application

    1. 给 web 项目指定一个名字

    1. 然后选择一个 空模板

    1. 点击 确定 生成 project

    这样我们就创建好了一个 ASP.Net web application 项目

    如果你已经安装了 NuGet,你可以通过 NuGet 去安装 Dapper,做法就是在 解决方案窗口 下的 Project 上右键选择 Manage NuGet Package ... 并且找到 Dapper,然后点击安装开启这个安装过程,一旦 Dapper 被成功安装,你就可以愉快的玩起来了哈。

    使用 Dapper ORM 进行增删查改

    接下来我用 Dapper 写一些简单的 CURD 语句来操作数据库,考虑如下的 IDG 数据库,包含了一个 Author 表,表的字段如下:

    • ID

    • FirstName

    • LastName

    在使用Dapper时,你需要针对 数据库表 创建一个简单的实体类(POCO class),下面定义了 Author 实体对应 IDB 数据库的 Author 表。

    public class Author{public int Id { get; set; }public string FirstName { get; set; }public string LastName { get; set; }}

    使用 Dapper 的 Query() 扩展方法,可以实现对数据库的查询然后将数据填充到你的 object model 中,下面方法的作用就是从 Author 表中查询所有的数据,然后存储到内存中,最后返回一个集合给调用方。

    public List<Author> ReadAll(){using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings[“AdventureWorks”].ConnectionString)){return db.Query<Author>(“Select * From Author”).ToList();}}

    对了,为了能够使用上 Dapper 的扩展方法,你需要在代码文件的顶部引入 Dapper 命名空间,如下图:

    下面的方法展示了如何从 Author table 表中查询指定的记录。

    public Author Find(int id)    {using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString)){return db.Query<Author>(“Select * From Author “ + WHERE Id = @Id”, new { id }).SingleOrDefault();}}

    Dapper 的 Execute() 方法可以实现对数据的新增,修改,删除,此方法返回一个整数值,该值表示在执行查询时受到的影响行数。

    下面的方法展示了如何使用 Dapper 更新一条记录。

    public int Update(Author author){using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString)){string sqlQuery ="UPDATE Author SET FirstName = @FirstName, " +“ LastName = @LastName “ + “WHERE Id = @Id”;int rowsAffected = db.Execute(sqlQuery, author);return rowsAffected;}}

    正如上面代码所述,Update 方法返回了一个受影响的行数,意味着这么多的记录被修改,上面这段代码只会有一条记录被更新,所以说如果更新成功返回的就是 1。

    在 Dapper ORM 中使用 存储过程

    为了能够使用 Dapper 执行存储过程,在调用 Query 或者 Execute 方法时需要手工指定一下 CommandType 类型,下面的例子展示了如何使用 Dapper 执行 存储过程。

    public List<Author> Read(){using (IDbConnection db = new SqlConnection (ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString)){string readSp ="GetAllAuthors";return db.Query<Author>(readSp, commandType: CommandType.StoredProcedure).ToList();}}

    Dapper 框架也是支持事务操作的,如果有必要的话可以使用事务,使用方式很简单,你可以利用 BeginTransaction() 和 EndTransaction() 方法,其实和你使用 ADO.NET 的事务方式是一摸一样的,将需要事务的语句代码放置在 BeginTransaction 和 EndTransaction 之间即可。

    Dapper ORM 真的是相当羽翼级 并且非常方便使用,它不会为你生成任何sql语句,在这种情况下还能够非常便捷的将查询结果映射到你的 POCO 对象上,最????????的是,它的执行速度远超 Entity Framework,实际上,能和原生的 ADO.Net 媲美。

如何在 C# 中使用 Dapper ORM相关推荐

  1. 【无标题】如何在C#中使用Dapper ORM学习通http://www.bdgxy.com/

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 表格制作excel教程h ...

  2. dapper 连接mysql_如何在.NET中使用Dapper处理数据库连接?

    Microsoft.AspNetCore.All:v2.0.3 | Dapper:v1.50.2 我不确定我是否正确地使用了最佳实践,但是我这样做是为了处理多个连接字符串. 如果只有1个连接字符串,这 ...

  3. 如何在Django中以GROUP BY查询?

    本文翻译自:How to query as GROUP BY in django? I query a model: 我查询一个模型: Members.objects.all() And it ret ...

  4. java如何用反射把具体方法抽象_如何在Java 中使用泛型或反射机制对DAO进行抽象...

    如何在Java 中使用泛型或反射机制对DAO进行抽象 发布时间:2020-11-26 16:07:42 来源:亿速云 阅读:80 作者:Leah 本篇文章为大家展示了如何在Java 中使用泛型或反射机 ...

  5. 如何在SharePoint2010中添加Deep Zoom Image

    如何在SharePoint2010中添加Deep Zoom Image 应用范围 SharePoint 2010 Foundation:SharePoint 2010 Standard:SharePo ...

  6. php如何对数组进行分组,如何在PHP中对数组进行分组排序

    如何在PHP中对数组进行分组排序 发布时间:2021-01-04 16:28:51 来源:亿速云 阅读:98 作者:Leah 这篇文章将为大家详细讲解有关如何在PHP中对数组进行分组排序,文章内容质量 ...

  7. html中section与div,如何在html中的section标签内包含div标签

    我正在制作一个完整版块的页面网站,如this.每个页面都有自己的标签.目前我的网页有4个部分(呈现不同的背景颜色).如何在html中的section标签内包含div标签 我的第一部分有一个容器div, ...

  8. html img调用js,html调用js变量 如何在html中输出js文件中的变量

    html页面代码中怎么调用js变量?html页面代码中怎么调用js变量,例如 在html代码中插入js代码: a=取浏览你把index1.js 中的onReady 去掉,把index1.js改成 fu ...

  9. 如何在OpenCV中为InRange阈值选择颜色的最佳HSV值

    如何在OpenCV中为InRange阈值选择颜色的最佳HSV值 1. 效果图 2. 源码 参考 之前的博客介绍了如何使用Python,OpenCV通过HSV颜色空间转换检测对象,并进行轨迹追踪.怎么选 ...

最新文章

  1. 02-线性结构3 Reversing Linked List
  2. 关于烂代码的那些事(中)
  3. vscode 免费视频教程
  4. Rsync和Sersync(企业实时同步方案)
  5. python inspect模块
  6. python高级功能_python高级篇
  7. Pytorch —— 模型保存与加载
  8. 优质淘宝产品描述页模板框架PSD分层模板,美工实用素材
  9. asp.net core 系列之允许跨域访问2之测试跨域(Enable Cross-Origin Requests:CORS)
  10. 苹果,你拿什么勇气来跟 Android 比?
  11. 在iOS中获取UIView的所有层级结构 相关
  12. 数据库 无损分解和保持依赖的判断
  13. flush和evit
  14. 利用finalshell连接腾讯云服务器linux系统记录
  15. 如何实现 React 中的状态自动保存?
  16. 【excel】定位列内差异/定位行内容差异单元格
  17. FMRI及NMR简介
  18. 【转】SpringMVC的工作原理图
  19. Play-Utils:一个专门为 Play Framework 开发的实用工具包模块
  20. Unity调用USB摄像头开启与关闭

热门文章

  1. 在FC中如何获取fcdot文件
  2. XidianOJ 1019 自然数的秘密
  3. [再寄小读者之数学篇](2014-11-14 矩阵的应用: 多项式)
  4. ASP.NET MVC CheckBoxFor为什么会生成hidden input控件
  5. javascript:设置URL参数的方法,适合多条件查询
  6. 算法的力量(李开复)
  7. Subversion之路--实现精细的目录访问权限控制(v1.0 更新于2006.12.05)(二)
  8. SpringBoot+Shiro学习(四):Realm授权
  9. 本文主要总结关于mysql的优化(将会持续更新)
  10. Netty1:初识Netty