.Net5 框架搭建(二):事务

2023-11-22 06:48
文章标签 搭建 框架 事务 net5

本文主要是介绍.Net5 框架搭建(二):事务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

用过数据库客户端操作的小伙伴都应该知道开始事务,提交事务等等这些操作,那么代码中怎么实现事务呢,往下看

认识事务

1、概念
数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

2、应用场景
举个业务例子,小张要转账给小李100元,那么正常这时候数据库是不是要做两件事情,第一件是小张账号余额减100,第二件是小李账号增加100元。那假如小张在扣钱的这个过程中数据库因某些原因导致失败了,那么小李那边的账号操作就应该直接取消了。

在这里插入图片描述

实现事务操作

.net 实现事务的方式用很多种,发现这篇文章介绍得很全面,推荐大家看看《.NET CORE 数据库事务进化总结》

因为框架需要,我没有使用后面那些工作单元、AOP 事务等方式,我选择利用线程id这种方式,这种方式也个很明显的缺点,就是不支持异步编程。

具体代码

在BLL层新增一个事务的方法
SystemUserBLL.cs

        /// <summary>/// 更新用户(事务)/// </summary>/// <param name="item"></param>/// <returns></returns>public DXResult Update(SystemUser item){DXResult dXResult = new DXResult();try{//注意:Transaction不支持异步编程_dal.fsql.Transaction(() =>{item.ModifyTime = DateTime.Now;//更新用户表dXResult.count = _dal.fsql.Update<SystemUser>().SetSource(item).IgnoreColumns(it => new { it.CreateTime }).ExecuteAffrows();//更新其他关联表_dal.fsql.Ado.ExecuteNonQuery(string.Format("UPDATE TEST_USER SET ModifyTime=sysdate WHERE USERID='{0}'", item.Id));//这个表是没有创建的,用于异常跳出if (dXResult.count < 1)throw new Exception("数据修改失败");dXResult.code = DXCode.Success;dXResult.msg = "数据已修改";});}catch (Exception ex){dXResult.code = DXCode.Failure;dXResult.msg = ex.Message;}return dXResult;}

接口
ISystemUserBLL.cs

DXResult Update(SystemUser item);

UI层

        [HttpPost("updateUser")]public dynamic UpdateUser(SystemUser user){var obj = _systemUserBLL.Update(user);return obj;}

开始测试

数据库现有两条数据
在这里插入图片描述

1、先注释掉这段代码,然后测试

                    //更新其他关联表//_dal.fsql.Ado.ExecuteNonQuery(string.Format("UPDATE TEST_USER SET ModifyTime=sysdate WHERE USERID='{0}'", item.Id));//这个表是没有创建的,用于异常跳出

在这里插入图片描述
成功更新数据
在这里插入图片描述
2、测试异常情况

在这里插入图片描述
在这里插入图片描述
数据没有变化,是期望的效果,成功。

完整代码已上传码云:https://gitee.com/shao-jiayong/cuo-ding

这篇关于.Net5 框架搭建(二):事务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/408281

相关文章

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte