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

项目位置在下图的地方:

祝您用餐愉快

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Python图像增强算法:低光增强+图像修复+超分辨率重建

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 在图像处理与计算机视觉领域&#xff0c;图像增强技术是提高图像质量和可用性的重要手段。在实…

单片机io扩展

输入输出扩展 i2c扩展 方案1:PCF8575 PCF8575双向IO口扩展模块 16位输入输出I2C通讯 单片机级联扩展板 方案2&#xff1a;PCA955A 输出扩展 74HC595 io口扩展模块输出口扩展 参考链接 中微爱芯发[2004] 1号           签发人&#xff1a; (szlcsc.com)https://…

❤ Vscode和Idea都可以使用的-AI插件(官方-百度出的)

❤ Vscode和Idea都可以使用的-AI插件&#xff08;官方-百度出的&#xff09; 最新AI特别火&#xff0c;给大家推荐一下最新出的VScode插件&#xff0c;辅助我们写代码&#xff01; 1、下载地址&#xff1a; > https://comate.baidu.com/zh/shopping?inviteCodefkzlak8f …

jmeter中Ultimate Thread Group设计梯度压测场景

Ultimate Thread Group Ultimate Thread Group 线程组是模拟波浪式压测或者阶梯式负载压测 1、Start Threads Count&#xff1a;线程数量 2、Initial Delay&#xff0c;sec&#xff1a;每组开始添加到测试执行之前的延迟&#xff08;xx秒开始启动线程&#xff09; 3、Startu…

python中的线程并行

文章目录 1. 单线程2. 线程池ThreadPoolExecutor 1. 单线程 现在有1154张图片需要顺时针旋转后保存到本地&#xff0c;一般使用循环1154次处理&#xff0c;具体代码如下所示&#xff0c;img_paths中存储1154个图片路径&#xff0c;该代码段耗时约用97ms。 t1time.time() for …

Python筑基之旅-MySQL数据库(四)

目录 一、数据表操作 1、新增记录 1-1、用mysql-connector-python库 1-2、用PyMySQL库 1-3、用PeeWee库 1-4、用SQLAlchemy库 2、删除记录 2-1、用mysql-connector-python库 2-2、用PyMySQL库 2-3、用PeeWee库 2-4、用SQLAlchemy库 3、修改记录 3-1、用mysql-conn…

Java轻松转换Markdown文件到Word和PDF文档

Markdown 凭借其简洁易用的特性&#xff0c;成为创建和编辑纯文本文档的常用选择。但某些时候我们需要更加精致的展示效果&#xff0c;例如在专业分享文档或打印成离线使用的纸质版时&#xff0c;就需要将Markdown文件以其他固定的文档格式呈现。通过将 Markdown 转换为 Word 和…

OpenHarmony实战开发——网络组件axios可以在OpenHarmony上使用了

什么是axios 上古浏览器页面在向服务器请求数据时&#xff0c;因为返回的是整个页面的数据&#xff0c;页面都会强制刷新一下&#xff0c;这对于用户来讲并不是很友好。并且我们只是需要修改页面的部分数据&#xff0c;但是从服务器端发送的却是整个页面的数据&#xff0c;十分…

高效写代码java-推荐插件1(格式转化 ConverterX )-日后待更新

ConverterX 主要功能:格式转化 字符串格式转换 日期转换 Json格式转义 字符格式 快捷键 ctrl shiftS Upper(CODEEASE)字符串全部变成大写Lower(codeease)字符串全部变成小写Camel(codeEase)字符串变成小驼峰ClassCaemel(CodeEase)字符串变成大驼峰UnderlineUpper(CODE_EAS…

python实用系列:按顺序重命名文件

啊&#xff0c;好久没更博客了&#xff0c;今天偶然想换个桌面壁纸&#xff0c;于是上网搜了两个比较满意的桌面壁纸&#xff0c;都是压缩包&#xff1a; 当我想要给他们放到我的桌面壁纸文件里的时候患了难&#xff0c;因为他们的名字有相同的&#xff1a; anime文件夹里边&a…

揭秘!亚马逊、Vinted卖家如何借助自养号测评实现爆单?

​作为一名跨境卖家&#xff0c;你一定梦想着能够在亚马逊上实现爆单&#xff0c;让产品火爆销售。下面就分享五个秘诀&#xff0c;帮助你实现这个梦想&#xff1a; 1. 优质产品&#xff1a;首先&#xff0c;确保你的产品质量优秀&#xff0c;能够满足消费者的需求。品质好的产…

基于Matlab使用BP神经网络进行电力系统短期负荷预测

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 电力系统的短期负荷预测对于电力调度和能源管理具有至关重要的作用。通过准确地预测电力负荷&…

【产品经理】输出

引言&#xff1a;        在最近频繁的产品管理职位面试中&#xff0c;我深刻体会到了作为产品经理需要的不仅仅是对市场和技术的敏锐洞察&#xff0c;更多的是在复杂多变的环境中&#xff0c;如何运用沟通、领导力和决策能力来引导产品从概念走向市场。这一系列博客将分享…

CAN网络管理(TJA1145如何实现MCU的休眠唤醒)

节点唤醒方式 本地唤醒&#xff1a; 唤醒源来源于自身模块&#xff0c;比如常说的KL15&#xff0c;控制器由KL15线供电&#xff0c;即只能在钥匙置于“ACC”或者“ON”档时运行软件和维持CAN通信 对于正在运行的CPU软件&#xff0c;无论它处在什么状态&#xff0c;只要Hardwa…

Plesk中如何移除之前添加的域名

我这边想要移除我之前绑定到主机的域名&#xff0c;但是不知道如何在主机上面进行移除&#xff0c;由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板&#xff0c;但是不知道如何在Plesk上操作移除域名&#xff0c;因为也是对于Hostease主机产品不是很了…

获取和设置代理的动态IP的方式

引言 大家好&#xff0c;今天我来给大家分享一下如何通过编程技术来获取和设置代理的动态IP。在网络世界中&#xff0c;代理和动态IP是非常常见的概念&#xff0c;尤其对于需要大规模访问网站或者需要隐藏真实IP地址的应用程序来说&#xff0c;更是必不可少的工具。接下来&…

Java方法的基本用法

Java方法的基本用法 前言一、什么是方法方法存在的意义示例 二、方法定义语法基本语法代码示例注意事项 三、方法调用的执行过程基本规则代码示例计算两个整数相加计算 1! 2! 3! 4! 5! 四、实参和形参的关系代码示例交换两个整型变量原因分析解决办法 五、没有返回值的方法…

初识java——javaSE (6)接口的实现——比较器与深拷贝,浅拷贝

文章目录 前言一 比较器1.1 关于两个对象的比较1.2 Comparable接口&#xff1a;1.3 Arrays.sort方法的实现1.4 比较器的实现Comparator接口 二 深拷贝与浅拷贝2.1 浅拷贝&#xff1a;Cloneable接口&#xff1a;clone方法&#xff1a;实现拷贝&#xff1a;浅拷贝&#xff1a; 2.…

Python3 笔记:Python的所有关键字

查看Python的关键字首先需要用import导入keyword模块 import keyword # 查看Python的所有关键字&#xff0c;先用import导入keyword模块 print(keyword.kwlist) 运行结果&#xff1a; [False, None, True, and, as, assert, async, await, break, class, continue, def, …

ASP+ACCESS基于WEB网上留言板

摘要 本文概述了ACCESS数据库及其相关的一些知识&#xff0c;着重论述ACCESS数据库和ASP的中间技术&#xff0c;构建一个简单的留言板。具体的实现是构造一个留言板系统&#xff0c;能很方便的和同学沟通和交流。留言板具有功能强大、使用方便的特点。用户以个人的身份进入&am…