如何在C#中使用Dapper(译)
前言:
对象关系映射(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(译)的更多相关文章
- 如何在Git中撤销一切 | 干货
翻译:李伟 审校:张帆 译自:Github JF杰微刊:如何在Git中撤销一切 任何一个版本控制系统中,最有用的特性之一莫过于 "撤销(undo)"操作.在Git中,"撤 ...
- .NET Core中使用Dapper操作Oracle存储过程最佳实践
为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDir ...
- NET Core中使用Dapper操作Oracle存储过程
.NET Core中使用Dapper操作Oracle存储过程最佳实践 为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为Or ...
- 转 如何在C++中调用C程序
如何在C++中调用C程序? C++和C是两种完全不同的编译链接处理方式,如果直接在C++里面调用C函数,会找不到函数体,报链接错误.要解决这个问题,就要在 C++文件里面显示声明一下哪些函数是C写 ...
- 我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- mono for android中使用dapper或petapoco对sqlite进行数据操作
在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...
- 如何在SpringBoot中使用JSP ?但强烈不推荐,果断改Themeleaf吧
做WEB项目,一定都用过JSP这个大牌.Spring MVC里面也可以很方便的将JSP与一个View关联起来,使用还是非常方便的.当你从一个传统的Spring MVC项目转入一个Spring Boot ...
- 如何在latex 中插入EPS格式图片
如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...
- 如何正确的使用json?如何在.Net中使用json?
什么是json json是一种轻量级的数据交换格式,由N组键值对组成的字符串,完全独立于语言的文本格式. 为什么要使用json 在很久很久以前,调用第三方API时,我们通常是采用xml进行数据交互,但 ...
随机推荐
- 解决Spark filter过滤条件中使用>=或<=时不识别的问题
一.场景 val jldxx_zxzq = jldxx_with_dddf .withColumn("ZXZQ", zxzq(col("CBZQ"))) .fi ...
- java笔记----常见的异常
常见的可控异常 运行时的异常 异常信息的获取
- 语句调优基础知识-set statistics profile on
set statistics profile on 获取语句真实的执行计划信息 set statistics profile on go select distinct Productid,unitp ...
- UGUI ContentSizeFitter之Button根据Text自适应
环境 Unity3D 5.3.6f1 练习地址:https://github.com/zhaoqingqing/UGUIDemo 布局放在Layout文件夹 文档:https://docs.unit ...
- 聚类——WKFCM
聚类——认识WKFCM算法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考文献:Shen H, Yang J, Wang S, et al. At ...
- 《Linux服务器的监控》
本文地址:http://www.cnblogs.com/aiweixiao/p/7131532.html 原文地址(公众号):http://t.cn/RKwmqUs 点击关注 微信公众号 1. 监控概 ...
- js刷新页面的几种方式与区别
Javascript刷新页面的几种方法:1 history.go(0) 2 location.reload() 3 location=location 4 location.assign(locati ...
- Linux之权限详解
如何知道你有什么权限 我能干什么?这是我最关心的问题! 切换到普通用户 [root@luffy-01 ~]# su - pizza [pizza@luffy-01 ~]$ ls /root ls: c ...
- 只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句
错误信息:只有 assignment.call.increment.decrement 和 new 对象表达式可用作语句: 分析:发生这种情况一般是在赋值时把“=”写成了“==”,例如:textBox ...
- luogu P4735 最大异或和
嘟嘟嘟 省选竟然考了一个可持久化trie,就挑着我不会的考. 话说考场上我确实写了一个trie的做法,只不过一直没调出来然后就只剩暴力分了. 现在想想实在是太蠢了,明明对算法没有把握,却头脑一热在这题 ...