不用写语句的轻量级orm_ASP.NET Core 中的 ORM 之 Dapper

Dapper简介

Dapper是.NET的一款轻量级ORM工具(GitHub),也可称为简单对象映射器。在速度方面拥有微型ORM之王的称号。

它是半自动的,也就是说实体类和SQL语句都要自己写,但它提供自动对象映射。是通过对IDbConnection接口的扩展来操作数据库的。

优点

  • 轻量,只有一个文件
  • 性能高,Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
  • 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
  • 使用Dapper可以自动进行对象映射,通过Emit反射IDataReader的序列队列,来快速的得到和产生对象

使用Dapper

下面简单创建一个Web API应用并通过Dapper访问MySQL数据。

  1. 创建MySQL测试数据
1e62ed20b4effeee9d0c8beeed575dc3.png

创建Web API应用并添加NuGet引用

Install-Package MySql.Data

Install-Package Dapper

新建一个Product类

4058beeb301984279990d08d0619c3fe.png

新建一个DBConfig类用于创建并返回数据库连接

00691a1c26a3462d53e972cc3d642041.png

创建简单的仓储接口和类

9f81333863b1fa6a4fe136738fb68e73.png
ebfadc7583252ab6bdc25644f802f58b.png

在Startup ConfigureServices方法里面配置依赖注入

170d368f1263b75b78c23bbdaef36a5c.png

在Controller里面调用仓储方法

6459bd87a404150df4be5e0d429fa2d3.png
  1. 测试API是否可以正常工作
  2. Dapper对存储过程和事务的支持
  3. 存储过程
58df7b981907daf58a645b6286373687.png

事务

3c306f92732e588a7f9e1898968a4bc7.png

Dapper对多表映射的支持

276148bae3e1a94de1ff150eafe4a77f.png

使用Dapper Contrib或其他扩展

Dapper Contrib扩展Dapper提供了CRUD的方法

  • Get
  • GetAll
  • Insert
  • Update
  • Delete
  • DeleteAll
  1. 添加NuGet引用Dapper.Contrib
Install-Package Dapper.Contrib
  1. 为Product类添加数据注解
3e091903ee0ad76afda28fa0f7b59aa4.png

增加一个新的仓储类继承

9b3ec0366f2a155539b2def7bf0c5f64.png
  1. 修改Startup ConfigureServices方法里面配置依赖注入
services.AddTransient();
  1. 测试,这样可以少写了不少基本的SQL语句。
  2. 其他一些开源的Dapper扩展

类库提供的方法Dapper.SimpleCRUDGet GetList GetListPaged Insert Update Delete DeleteList RecordCountDapper PlusBulk Insert Bulk Delete Bulk Update Bulk Merge Bulk Action Async Bulk Also Action Bulk Then ActionDapper.FastCRUDGet Find Insert Update BulkUpdate Delete BulkDelete CountDapper.MapperMulti-mapping

引入工作单元Unit of Work

仓储模式往往需要工作单元模式的介入来负责一系列仓储对象的持久化,确保数据完整性。网上关于工作单元模式的实现方式有多种,但其本质都是工作单元类通过创建一个所有仓储共享的数据库上下文对象,来组织多个仓储对象。

网上的一些实现方式:

  • Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application
  • 微软之前给出的一个示例,仓储类做为工作单元的变量,并通过工作单元传入一致的context参数创建。
  • DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
  • 博客园一位大神的总结,最终采用的方案是仓储类负责查询,工作单元类负责增删改等数据持久化操作。

优缺点不作讨论,适合自己的就是最好的,这里采用了另外一种实现方式:

  • 定义DapperDBContext
c12b0e8fd91591cb4b1c5fad09676538.png

后面省略了很多代码,有兴趣通过阅读原文到博客上去阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值