.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

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

使用DeepSeek搭建个人知识库(在笔记本电脑上)

《使用DeepSeek搭建个人知识库(在笔记本电脑上)》本文介绍了如何在笔记本电脑上使用DeepSeek和开源工具搭建个人知识库,通过安装DeepSeek和RAGFlow,并使用CherryStudi... 目录部署环境软件清单安装DeepSeek安装Cherry Studio安装RAGFlow设置知识库总

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1