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测试数据

640?wx_fmt=png

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

Install-Package MySql.Data

Install-Package Dapper

新建一个Product类

640?wx_fmt=png

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

640?wx_fmt=png

创建简单的仓储接口和类

640?wx_fmt=png

640?wx_fmt=png

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

640?wx_fmt=png

在Controller里面调用仓储方法

640?wx_fmt=png

  1. 测试API是否可以正常工作

  2. Dapper对存储过程和事务的支持

    存储过程

640?wx_fmt=png

事务

640?wx_fmt=png

Dapper对多表映射的支持

640?wx_fmt=png

使用Dapper Contrib或其他扩展

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

  • Get

  • GetAll

  • Insert

  • Update

  • Delete

  • DeleteAll

  1. 添加NuGet引用Dapper.Contrib

    Install-Package Dapper.Contrib
  2. 为Product类添加数据注解

640?wx_fmt=png

增加一个新的仓储类继承

640?wx_fmt=png

  1. 修改Startup ConfigureServices方法里面配置依赖注入

    services.AddTransient<IProductRepository, ContribProductRepository>();

    测试,这样可以少写了不少基本的SQL语句。

  2. 其他一些开源的Dapper扩展

类库提供的方法
Dapper.SimpleCRUDGet GetList GetListPaged Insert Update Delete DeleteList RecordCount
Dapper PlusBulk Insert Bulk Delete Bulk Update Bulk Merge Bulk Action Async Bulk Also Action Bulk Then Action
Dapper.FastCRUDGet Find Insert Update BulkUpdate Delete BulkDelete Count
Dapper.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

640?wx_fmt=png

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

原文地址: https://www.cnblogs.com/royzshare/p/9522127.html


 
 

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值