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数据。
创建MySQL测试数据
创建Web API应用并添加NuGet引用
Install-Package MySql.Data
Install-Package Dapper
新建一个Product类
新建一个DBConfig类用于创建并返回数据库连接
创建简单的仓储接口和类
在Startup ConfigureServices方法里面配置依赖注入
在Controller里面调用仓储方法
测试API是否可以正常工作
Dapper对存储过程和事务的支持
存储过程
事务
Dapper对多表映射的支持
使用Dapper Contrib或其他扩展
Dapper Contrib扩展Dapper提供了CRUD的方法
Get
GetAll
Insert
Update
Delete
DeleteAll
添加NuGet引用Dapper.Contrib
Install-Package Dapper.Contrib
为Product类添加数据注解
增加一个新的仓储类继承
修改Startup ConfigureServices方法里面配置依赖注入
services.AddTransient<IProductRepository, ContribProductRepository>();
测试,这样可以少写了不少基本的SQL语句。
其他一些开源的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
后面省略了很多代码,有兴趣通过阅读原文到博客上去阅读。
原文地址: https://www.cnblogs.com/royzshare/p/9522127.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
ASP.NET Core 中的 ORM 之 Dapper相关推荐
- ASP.NET Core 中的 ORM 之 Entity Framework
目录 EF Core 简介 使用 EF Core(Code First) EF Core 中的一些常用知识点 实体建模 实体关系 种子数据 并发管理 执行 SQL 语句和存储过程 延迟加载和预先加载 ...
- 如何在 ASP.Net Core 中使用 MiniProfiler
web应用程序的性能相信是大家普遍关心的一个问题,也相信大家有很多工具可用来分析应用程序的性能并能够找到其中的瓶颈,MiniProfiler 就是这个领域中的一款产品,它是一款简单的,功能强大的web ...
- 如何使用C#在ASP.NET Core中轻松实现QRCoder
by Yogi 由瑜伽士 如何使用C#在ASP.NET Core中轻松实现QRCoder (How to easily implement QRCoder in ASP.NET Core using ...
- asp.net core中IHttpContextAccessor和HttpContextAccessor的妙用
分享一篇文章,关于asp.net core中httpcontext的拓展. 现在,试图围绕HttpContext.Current构建你的代码真的不是一个好主意,但是我想如果你正在迁移一个企业类型的应用 ...
- 在asp.net core中使用托管服务实现后台任务
在业务场景中经常需要后台服务不停的或定时处理一些任务,这些任务是不需要及时响应请求的. 在 asp.net中会使用windows服务来处理. 在 asp.net core中,可以使用托管服务来实现,托 ...
- ASP.NET Core中显示自定义错误页面-增强版
之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取. 在这篇博文中改用middleware实现,并且放在独 ...
- 探索ASP.NET Core中的IStartupFilter
原文:Exploring IStartupFilter in ASP.NET Core 作者:Andrew Lock 译者:Lamond Lu 在本篇博客中,我将介绍一下IStartupFilter, ...
- 如何简单的在 ASP.NET Core 中集成 JWT 认证?
前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包 自上一 ...
- 在 ASP.NET Core 中集成 Skywalking APM
前言 大家好,今天给大家介绍一下如何在 ASP.NET Core 项目中集成 Skywalking,Skywalking 是 Apache 基金会下面的一个开源 APM 项目,有些同学可能会 APM ...
最新文章
- 安卓 java内存碎片_理解Android Java垃圾回收机制
- Exchange Server 2010 灾难恢复
- access在sql中横向求和_access在sql中横向求和_求和还用Sum函数就out了,快捷键Alt+=一秒搞定,操作简单更高效......
- 【企业管理】人力资源-华为实践
- POJ - 1220 NUMBER BASE CONVERSION(高精度运算+进制转换+模拟)
- 数字心电图仪综合系统设计与实现verilog
- Unity3D学习笔记之二资源导入以及工程管理
- Hibernate锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作
- 阿里2000亿,腾讯5000亿,我们究竟需要多少数据中心?
- GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询
- 不需要的系统垃圾把它杀掉!
- 网络爬虫程序 *版本1.0.1* 修正几个问题
- FFmpeg build under MinGW【原创】
- c语言-网吧管理系统
- ios swift 纯代码设置UITableViewCell的style
- andtd的validateFields()验证成功,但不能执行if(!error){}内内容
- Python 使用 twitter API 获取twitter用户信息
- 报错:FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disab
- 启动/关闭oracle服务有三种方式
- Windows Phone 7 入门指南(Windows Phone 8已经发布,不过还有一些借鉴意义)