译文连接: https://www.infoworld.com/art...
对象关系映射(ORM)这个概念已经存在很长时间了,ORM的做用就是用来解决 编程领域的 object model 和关系数据库中的 data model 的不匹配问题,Dapper 是一个开源的,轻量级的 ORM 框架,由 Stack Overflow 团队开发,Dapper 和其余流行的ORM框架相比,最大的优势就是羽翼级。html
Dapper在最初开发时就考虑到了性能和易用性,它支持在 事务,存储过程 或者 批量插入时进行静态或者动态的对象绑定。git
要想了解 Dapper,从下面的步骤开始吧:github
这样咱们就建立好了一个 ASP.Net web application 项目web
若是你已经安装了 NuGet,你能够经过 NuGet 去安装 Dapper,作法就是在 解决方案窗口
下的 Project 上右键选择 Manage NuGet Package ...
而且找到 Dapper,而后点击安装开启这个安装过程,一旦 Dapper 被成功安装,你就能够愉快的玩起来了哈。sql
接下来我用 Dapper 写一些简单的 CURD 语句来操做数据库,考虑以下的 IDG 数据库,包含了一个 Author 表,表的字段以下:数据库
在使用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 表中查询全部的数据,而后存储到内存中,最后返回一个集合给调用方。app
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 执行存储过程,在调用 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 媲美。
更多高质量干货:参见个人 GitHub: dotnetfly