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

ASP.NET Core 中的 ORM 之 Dapper_第1张图片

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

Install-Package MySql.Data

Install-Package Dapper

新建一个Product类

ASP.NET Core 中的 ORM 之 Dapper_第2张图片

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

ASP.NET Core 中的 ORM 之 Dapper_第3张图片

创建简单的仓储接口和类

ASP.NET Core 中的 ORM 之 Dapper_第4张图片

ASP.NET Core 中的 ORM 之 Dapper_第5张图片

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

ASP.NET Core 中的 ORM 之 Dapper_第6张图片

在Controller里面调用仓储方法

ASP.NET Core 中的 ORM 之 Dapper_第7张图片

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

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

    存储过程

ASP.NET Core 中的 ORM 之 Dapper_第8张图片

事务

ASP.NET Core 中的 ORM 之 Dapper_第9张图片

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类添加数据注解

ASP.NET Core 中的 ORM 之 Dapper_第10张图片

增加一个新的仓储类继承

ASP.NET Core 中的 ORM 之 Dapper_第11张图片

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

    services.AddTransient<IProductRepository, ContribProductRepository>();

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

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

类库 提供的方法
Dapper.SimpleCRUD Get GetList GetListPaged Insert Update Delete DeleteList RecordCount
Dapper Plus Bulk Insert Bulk Delete Bulk Update Bulk Merge Bulk Action Async Bulk Also Action Bulk Then Action
Dapper.FastCRUD Get Find Insert Update BulkUpdate Delete BulkDelete Count
Dapper.Mapper Multi-mapping

引入工作单元Unit of Work

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

网上的一些实现方式:

  • Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application
    微软之前给出的一个示例,仓储类做为工作单元的变量,并通过工作单元传入一致的context参数创建。

  • DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
    博客园一位大神的总结,最终采用的方案是仓储类负责查询,工作单元类负责增删改等数据持久化操作。

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

  • 定义DapperDBContext

ASP.NET Core 中的 ORM 之 Dapper_第12张图片

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

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


 
   

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

640?wx_fmt=jpeg

你可能感兴趣的:(ASP.NET Core 中的 ORM 之 Dapper)