首页 > 其他分享 >自动启用事务的筛选器

自动启用事务的筛选器

时间:2023-10-29 11:33:35浏览次数:24  
标签:回滚 启用 数据库 事务 using 筛选 执行 hasNotTransactionalAttribute

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

就是我们对数据库中的每个表的增删改查,把这些操作当作全体来执行,只要其中有一项出错,就会把之前执行的操作回滚;

 

数据库事务:要么全部成功,要么全部失败 ;

自动化: 启动,提交以及回滚事务。

当一段使用EFCore进行数据库操作的代码放到TransactionScope声明范围中的时候,这段代码就会被自动标记为支持事务 ;

TRansactionScope实现了IDsiposable接口,如果一个TRansactionScope的对象没有调用Complete()就执行了Dispose()方法,则事务就会被回滚,否则事务就会被提交。

TranSactionScope还支持嵌套事务。

 

 

ctx.savechanges  一个事务!

ActionDescriptor 当前被执行的方法的描述信息;
actionArguments 中是当前被执行的action方法的参数信息 ;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Reflection;
using System.Transactions;

namespace 自动启用事务的筛选器
{
    public class TransactionScopeFilter : IAsyncActionFilter
    {
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            bool hasNotTransactionalAttribute = false;
            if (context.ActionDescriptor is ControllerActionDescriptor)
            {
                var actionDesc = (ControllerActionDescriptor)context.ActionDescriptor;
                hasNotTransactionalAttribute = actionDesc.MethodInfo
                    .IsDefined(typeof(NotTransactionalAttribute));
            }
            if (hasNotTransactionalAttribute)
            {
                await next();
                return;
            }
            using var txScope =
                    new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);
            var result = await next();
            if (result.Exception == null)
            {
                txScope.Complete();  // 需要回滚
            }
        }
    }
}

 

标签:回滚,启用,数据库,事务,using,筛选,执行,hasNotTransactionalAttribute
From: https://www.cnblogs.com/zhulongxu/p/17795662.html

相关文章

  • 面试题:MySQL事务的ACID如何实现?
    大家好,我是【码老思】,事务是一个数据库绕不开的话题,今天和大家一起聊聊。事务是什么?事务(Transaction)是并发控制的基本单位。所谓的事务呢,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。在介绍事务的特性之前,我们先看下MySQL的逻辑架构,如......
  • javaweb--事务
    beginupdate.........commit事务的四大特征A原子性--要么都成功要么都失败C一致性--事务完成时必须所有数据都保持一致状态I隔离性--多个事务之见操作的可见性D持久性--事务一旦提交或会滚,对数据库中数据的改变是永久的查看事务默认自动提交select@@autocommit;1->自......
  • 分布式【分布式事务】
    一、事务    事务实现应该具备原子性、一致性、隔离性和持久性。即ACID。    原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行。    一致性(Consistency),可以理解为数据是满足完整性约束的,也就是不会存在中间状态的数据,比如你账上有4......
  • SQL Server事务及隔离级别
    事务的并发操作可能出现的问题中文英文描述脏读DirtyReads事务2读到了事务1未提交的事务,事务1随后回滚,但事务2读到了事务1的“中间数据”。在ReadUncommitted隔离级别下会发生,其它级别不会。(update&read)丢失更新LostUpdates两个事务对同一个行分别进行......
  • 大事务导致数据库恢复时间长​
    背景客户的一套系统从凌晨开始出现运行缓慢,重启SQLServer服务后一个主要的数据库一直处在正在恢复的状态,多次重启SQLServer服务和服务器无果后请我们协助处理。现象在SSMS中看到数据库是正在恢复的状态,而且不能被访问。分析启动SQLServer服务时数据库恢复要经过分析、重做和撤销......
  • Revit 自定义事务进行自动管理事务DBTrans实现
    第一步:自定义事务对象自定义事务对象///<summary>///自定义事务///</summary>publicclassDBTrans:IDisposable{#region私有字段privatebooldisposedValue;privatebool_commit;///<summary>......
  • mysql5.7启用ssl连接(windows版本)
    环境:OS:windows2012Mysql:5.7.29 1.安装mysql安装步骤省略,mysql5.7默认安装都已经安装好了ssl的,并默认启用了的.证书在数据目录下 D:\mysql57\dataD:\mysql57\data>dir驱动器D中的卷是新加卷卷的序列号是7603-6C5BD:\mysql57\data>dir*.pem驱动器D中的......
  • 事务,python连接mysql 索引等
    1.python连接MySQLMySQL本身就是一款C/S架构,有服务端、有客户端,自身带了有客户端:mysql.exepython这门语言成为了MySQL的客户端(对于一个服务端来说,客户端可以有很多)"""SQL的由来"""操作步骤:1.先链接MySQLhost、port、username、password、charset、库等......
  • # yyds干货盘点 # Python实现excel工作簿中单元格底色为黄色的数据筛选
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个pandas数据提取的问题,一起来看看吧。大佬们请教个问题有没有什么办法可以实现 excel工作簿中单元格底色为黄色的行筛选出来 当行只要有一个单元格标黄了当行数据筛选出来?二、实现过程这里【......
  • Python实现excel工作簿中单元格底色为黄色的数据筛选
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个pandas数据提取的问题,一起来看看吧。大佬们请教个问题有没有什么办法可以实现 excel工作簿中单元格底色为黄色的行筛选出来 当行只要有一个单元格标黄了当行数据筛选出来?二、实现过程......