.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极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.