前言:

对象关系映射(ORM)已经被使用了很长时间,以解决在编程过程中对象模型与数据模型在关系数据库中不匹配的问题。

Dapper是由Stack OverFlow团队开发的开源的,轻量级的ORM.相比于其他的ORM框架,Dapper速度非常快。

Dapper的设计考虑到了性能以及易用性。它支持使用事务,存储过程或数据批量插入的静态和动态对象绑定。

下载和安装Dapper:

要开始使用Dapper,请遵循以下步骤:

1.打开Visual Studio

2.点击文件(File)->新建(New)->项目(Project)
3.从新建项目对话框中选择Web->ASP.Net Web Application

4.为项目指定一个名称

5.选择空项目模板

6.点击“确定”

以上将创建一个空的ASP.Net应用程序项目。

注:如果你已经安装了NuGet,你可以使用NuGet来安装Dapper->在解决方案资源管理器中选中项目,右击项目选择“管理Nuget包...”,找到Dapper进行安装,成功之后就可以到下一步啦。

在.NET中使用Dapper进行CRUD操作:

现在让我们写一些代码,使用Dapper对数据库进行CRUD操作,首先创建一个名为“IDG”的数据库,它包含一个名为“Author”的表,表中包含以下字段:ID,FirstName,LastName。

然后我们需要创建一个实体类(POCO类),下面是与数据库IDG中Author表相对应的实体类Author:

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

Dapper中的扩展方法Query()能够让你从数据库中检索数据并填充到对象模型中。

下面的方法是从Author表中检索所有记录,并存储到内存中,最后返回一个集合:

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

注意需要在程序中包含Dapper命名空间,才能使用Dapper:

using Dapper;

下面的方法演示了如何从Auhor表中检索特定的一条记录:

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中的使用:

要使用Dapper处理存储过程,需在调用Query()或者Exectue()方法时显示地提到命令类型。下面的示例演示了如何使用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() and EndTransaction()方法,就像通常在ADO.NET中处理事务一样,然后,您需要在BeginTransaction()和EndTransaction()方法调用中编写事务语句。

Dapper非常轻且使用起来非常简单,它不会为你生成SQL,但是可以很容易地将查询结果映射到POCOs(普通的旧CLR对象).最重要的是,你可以获得比EntityFrameWork更快的执行速度,事实上,几乎和ADO.NET一样。

这是我翻译的国外的一篇文章,旨在提升自己的英语水平,以及加深自己对知识点的积累,如果能帮助到一些小伙伴那就再好不过了。

原文链接:

https://www.infoworld.com/article/3025784/application-development/how-to-work-with-dapper-in-c.html

如何在C#中使用Dapper(译)的更多相关文章

  1. 如何在Git中撤销一切 | 干货

    翻译:李伟 审校:张帆 译自:Github JF杰微刊:如何在Git中撤销一切 任何一个版本控制系统中,最有用的特性之一莫过于 "撤销(undo)"操作.在Git中,"撤 ...

  2. .NET Core中使用Dapper操作Oracle存储过程最佳实践

    为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDir ...

  3. NET Core中使用Dapper操作Oracle存储过程

    .NET Core中使用Dapper操作Oracle存储过程最佳实践   为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为Or ...

  4. 转 如何在C++中调用C程序

    如何在C++中调用C程序?   C++和C是两种完全不同的编译链接处理方式,如果直接在C++里面调用C函数,会找不到函数体,报链接错误.要解决这个问题,就要在 C++文件里面显示声明一下哪些函数是C写 ...

  5. 我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  6. mono for android中使用dapper或petapoco对sqlite进行数据操作

    在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...

  7. 如何在SpringBoot中使用JSP ?但强烈不推荐,果断改Themeleaf吧

    做WEB项目,一定都用过JSP这个大牌.Spring MVC里面也可以很方便的将JSP与一个View关联起来,使用还是非常方便的.当你从一个传统的Spring MVC项目转入一个Spring Boot ...

  8. 如何在latex 中插入EPS格式图片

    如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...

  9. 如何正确的使用json?如何在.Net中使用json?

    什么是json json是一种轻量级的数据交换格式,由N组键值对组成的字符串,完全独立于语言的文本格式. 为什么要使用json 在很久很久以前,调用第三方API时,我们通常是采用xml进行数据交互,但 ...

随机推荐

  1. 基于cifar10实现卷积神经网络图像识别

    import tensorflow as tf import numpy as np import math import time import cifar10 import cifar10_inp ...

  2. java.lang.IllegalStateException: Cannot forward after response has been committed的一个情况解决方法

    java.lang.IllegalStateException: Cannot forward after response has been committed xxx.xxx.doPost(upd ...

  3. springmvc复习笔记----文件上传multipartResolver

    结构                                              web.xml <?xml version="1.0" encoding=&q ...

  4. JavaWeb入门笔记

    Java web笔记 一.HTTP协议 HTTP(超文本传输协议),它是一种主流B/S架构中应用的通信协议.具有以下特点: 1.无状态 服务端不会记录客户端每次提交的请求,服务器一旦相应客户端之后,就 ...

  5. C#解析XML 例子二

    <checkResult> <item> <fmId>XX0001</fmId> <fmItemId>20000RT</fmItemI ...

  6. Android音频系统

    1 分析思路 Thread如何创建? AudioPolicyService是策略的制定者,AudioFlinger是策略的执行者, 所以: AudioPolicyService根据配置文件使唤Audi ...

  7. 【算法】LeetCode算法题-Remove Element

    这是悦乐书的第150次更新,第152篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第9题(顺位题号是27).给定整数数组nums和值val,删除nums中所有的val值, ...

  8. 【DB2基础】DB2编目和数据库连接

    1.编目节点和编目数据库 编目(Catalog),是在本地或远程建立客户端到服务器的数据库连接的过程.其目的在于获取编目信息,即生成用来访问数据库的目录. 系统数据库目录包含一个列表和指针,通过目录可 ...

  9. 更高的压缩比,更好的性能–使用ORC文件格式优化Hive

    http://lxw1234.com/archives/2016/04/630.htm 关键字:orc.index.hive Hive从0.11版本开始提供了ORC的文件格式,ORC文件不仅仅是一种列 ...

  10. docker pull下载镜像报错Get https://registry-1.docker.io/v2/library/centos/manifests/latest:..... timeout

    使用docker pull从镜像仓库拉取镜像时报错如下:[root@docker-registry ~]# docker pull centosUsing default tag: latestTry ...