C# 利用Xejen框架源码,我们来开发一个基于Dapper技术的数据库通用的帮助访问类,通过Dapper的增删改查,可以访问Sqlite数据库

Dapper 是一个轻量级的对象关系映射(ORM)工具,适用于 .NET 平台。它由 Stack Overflow 团队开发,旨在提供简单、高效的数据访问功能。与其他重量级 ORM(如 Entity Framework)相比,Dapper 更加轻量级,并且性能极高,因为它在底层直接使用 ADO.NET。

Dapper 是一个轻量级、高性能的 ORM 工具,适合需要直接控制 SQL 查询但又希望简化数据访问代码的开发者。通过 Dapper,可以以接近原生 ADO.NET 的性能轻松执行数据库操作,并将结果映射到 C# 对象中。

主要特点

  1. 性能优越

    • Dapper 通过动态生成 SQL 查询并使用 ADO.NET 执行这些查询,提供了极高的性能。它通常被认为是最接近原生 ADO.NET 性能的 ORM。
  2. 简单易用

    • Dapper 具有简单的 API,开发者可以轻松地执行 SQL 查询并将结果映射到 C# 对象。
  3. 灵活性

    • 它不强制使用特定的架构或模式,开发者可以自由地构建自己的查询和命令。
  4. 轻量级

    • Dapper 没有复杂的设置和配置,可以很容易地集成到现有的项目中。

核心功能

  1. 查询

    • Query<T> 方法用于执行 SQL 查询并将结果映射到指定类型的对象列表。
  2. 单一查询

    • QueryFirstOrDefault<T>QuerySingle<T> 等方法用于执行 SQL 查询并返回单个对象。
  3. 执行命令

    • Execute 方法用于执行非查询命令(如插入、更新、删除)。
  4. 事务支持

    • 通过 ADO.NET 提供的事务机制,Dapper 可以在事务中执行多个命令。
  5. 存储过程

    • Dapper 支持执行存储过程,并且可以将结果映射到 C# 对象。

一、创建项目结构

如上图,基于Xejen框架,我们创建2个项目:
Xejen.Database.Dapper
Xejen.Database.Dapper.Sqlite

并引用需要的数据库包,以及引用Xejen框架项目,主要接入的包或项目如下:
Dapper:这是使用Dapper技术的核心关键nuget包
Xejen.Database:这是Xejen的框架中的数据库基础项目
System.Data.SQLite.Core:用于将Dapper跟微软体系结合起来的包

二、构建Dapper的专属仓储接口:IRepository<TEntity, TPrimaryKey>

每一种数据库操作,都应有各自的仓储接口。
比如Ef技术、SqlSugar技术、FreeSql技术等,他们各自的仓储功能是不尽一样的,所以我们应当为了适应未来的情形,得专门为各种技术做独立的仓储接口。

我们给Dapper初步设计的接口如下图所示:

三、我们构建仓储的抽象实现和具体实现


抽象实现,就是abstract class。。具体实现,就是具体的仓储类了。

由于Dapper是可以支持多种数据库的。
我们这里是使用Sqlite,所以,专门起了一个Xejen.Database.Dapper.Sqlite的项目来做实现。

为什么要专门起了一个Xejen.Database.Dapper.Sqlite的项目来做实现呢?

因为Sqlite和SqlServer等数据库各自的一些语句写法及特殊功能是不同的。所以,他们大部分可以共用,但小部分是有独特需求的,这就是要有独立的Sqlite工程项目的原因。如上图所示。

三、数据库上下文


Dapper的数据库上下文,都是实现自微软的IDbConnection。
所以,我们在构建数据库上下文 的驱动器接口:IDbContextProvider<TDbContext>时,只要限定TDbContext是来自于IDbConnection即可,这是非常简单的事情。

四、将仓储的实现与数据库驱动器(上下文)关联依赖起来

如上图,只需要简单的构造函数中依赖IDbContextProvider接口即可实现依赖,然后就可以实现各种各样的仓储需求了。

那么我们为什么要依赖IDbContextProvider接口,而不是直接依赖类似DbContext这种对象呢?
这是为了最大的抽象依赖,可以让系统不用改动,就可以切换数据库。这样做后,你不管是SqlServer还是Sqlite,都可以实现一套的仓储。
 

五、工作单元


Dapper有自己的数据库事务,我们在他的基础上做一个简单的工作单元即可。

六、示例演练

如上图,先将仓储进行依赖注入,便可以使用仓储了。
当然,这是Xejen框架本身有的主机功能,所以,我们可以直接注入仓储。Xejen框架初始化主机的代码如下,很简单:

接下来是增删改查和事务的测试,贴图你直接看下,对于喜欢使用原生Sql语句的人来说,Dapper应该会让你喜欢上:

基于Xejen框架构建的Dapper数据库项目,就介绍到这里。
所有源码,可以自行下载交流学习。

https://gitee.com/mazhiyuan1981/xejen-open.git

项目位置在下图的地方:

祝您用餐愉快

  • 30
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值