找回密码
 会员注册
查看: 153|回复: 0

ASP.NET Core 中的 ORM 之 Dapper

[复制链接]

1389

主题

5

回帖

496万

积分

管理员

积分
4962990
发表于 2024-2-29 08:18:57 | 显示全部楼层 |阅读模式

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

    1. Install-Package Dapper.Contrib
    复制代码
  2. 为Product类添加数据注解

640?wx_fmt=png

增加一个新的仓储类继承

640?wx_fmt=png

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

    1. 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


[code][/code]

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

640?wx_fmt=jpeg


来源:https://blog.csdn.net/sD7O95O/article/details/82010992
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?会员注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 23:59 , Processed in 0.686170 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表