当前位置: 首页 > wzjs >正文

ps做网站ui培训优化

ps做网站ui,培训优化,龙岗区建设工程交易中心,微生成网站文章目录 前言一、自动事务的ActionFilter二、使用步骤1)创建事务控制标注特性2)实现事务过滤器3)注册过滤器和 DbContext4)使用标注控制事务 三、关键机制说明四、扩展场景总结 前言 一、自动事务的ActionFilter ActionFilter是…

文章目录

  • 前言
  • 一、自动事务的ActionFilter
  • 二、使用步骤
    • 1)创建事务控制标注特性
    • 2)实现事务过滤器
    • 3)注册过滤器和 DbContext
    • 4)使用标注控制事务
  • 三、关键机制说明
  • 四、扩展场景
  • 总结


前言

一、自动事务的ActionFilter

ActionFilter是用于在控制器动作执行前后插入逻辑的,要实现自动事务,应该是在OnActionExecuting开始事务,在OnActionExecuted根据结果提交或回滚。

二、使用步骤

1)创建事务控制标注特性

  1. 定义一个 [Transactional] 特性,用于标记需要启用事务的 ControllerAction
    using System.Data;
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)]
    public class TransactionalAttribute : Attribute
    {// 可选:扩展属性,例如隔离级别public IsolationLevel IsolationLevel { get; set; } = IsolationLevel.ReadCommitted;
    }
    

2)实现事务过滤器

  1. 创建一个支持事务自动管理的 Action Filter,并根据 [Transactional] 标注决定是否启用事务
    using System.Data;
    using Microsoft.AspNetCore.Mvc.Controllers;
    using Microsoft.AspNetCore.Mvc.Filters;
    using Microsoft.EntityFrameworkCore;
    using InfrastructureLibrary.Data;public class TransactionFilter : IAsyncActionFilter
    {private readonly MyDbContext _dbContext;public TransactionFilter(MyDbContext dbContext){_dbContext = dbContext;}public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next){var (isTransactional, isolationLevel) = CheckTransactionAttribute(context);if (!isTransactional){await next();return;}await using var transaction= await _dbContext.Database.BeginTransactionAsync(isolationLevel);try{var res = await next();if (res.Exception != null){await transaction.RollbackAsync();}else{await transaction.CommitAsync();}}catch (Exception){await transaction.RollbackAsync();throw;}}private (bool IsTransactional, IsolationLevel IsolationLevel)CheckTransactionAttribute(ActionExecutingContext context) {var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;if (actionDescriptor == null) return (false, default);var attribute = actionDescriptor.MethodInfo.GetCustomAttributes(typeof(TransactionalAttribute), true).Cast<TransactionalAttribute>().FirstOrDefault()??actionDescriptor.ControllerTypeInfo.GetCustomAttributes(typeof(TransactionalAttribute),true).Cast<TransactionalAttribute>().FirstOrDefault();return (attribute != null, attribute?.IsolationLevel ?? IsolationLevel.ReadCommitted);}
    }
    

3)注册过滤器和 DbContext

  1. 注册过滤器
    builder.Services.AddControllers(opt =>
    {opt.Filters.Add<TransactionFilter>();
    });
    
  2. 注册DbContext
    builder.Services.AddDbContext<MyDbContext>(opt => {string connStr = builder.Configuration.GetConnectionString("DefaultConnection");opt.UseSqlServer(connStr);
    });
    

4)使用标注控制事务

  1. 在需要事务的 ControllerAction 上添加 [Transactional] 特性。
     [Route("api/[controller]/[action]")][ApiController][Transactional]public class TestFilterController : ControllerBase{private readonly IBookRepository _bookRepository;private readonly IPersonRepository _personRepository;public TestFilterController(IBookRepository bookRepository, IPersonRepository personRepository){_bookRepository = bookRepository;_personRepository = personRepository;}[HttpPost]//[Transactional][Transactional(IsolationLevel =IsolationLevel.Serializable)]//方法级别自定义隔离级别public async Task<IActionResult> TestAdd(){await _bookRepository.AddAsync(new Book { Author="33", Title="44",Price=30});await _personRepository.AddAsync(new Person { Name = "gggggggggggg", Age = 20 });return Ok();}[HttpGet]public ActionResult<string> Test(){Console.WriteLine("Action执行中");var res = System.IO.File.ReadAllText("d:/asdf.txt");return res;}}
    

三、关键机制说明

  1. 标注驱动
    通过 [Transactional] 特性标记需要事务的方法或控制器,过滤器自动检测并开启事务。

  2. 作用域与生命周期
    TransactionFilter 注册为 Scoped,确保每个请求有独立的事务。
    DbContext 默认注册为 Scoped,与事务生命周期一致。

  3. 隔离级别配置
    可通过 [Transactional(IsolationLevel = …)] 指定事务隔离级别。

    • 查询操作(低隔离):可能使用 ReadCommitted(默认),允许较高的并发性。
    • 资金转账(高隔离):可能使用 Serializable,严格避免脏读、不可重复读、幻读。
    • 批量导入(自定义):可能选择 RepeatableRead,平衡性能和一致性。
    • 常见隔离级别及其行为
      隔离级别允许的并发问题适用场景
      ReadUncommitted允许脏读、不可重复读、幻读对性能要求极高,可接受数据不一致
      ReadCommitted(默认)防止脏读,允许不可重复读、幻读多数业务场景(如普通查询和更新)
      RepeatableRead防止脏读、不可重复读,允许幻读需要保证同一事务内多次读取结果一致
      Serializable防止所有并发问题(最高隔离,性能最低)资金操作、严格一致性要求(如库存扣减)
  4. 异常处理
    Action 执行异常时自动回滚事务。
    未标记 [Transactional] 的请求直接跳过事务逻辑。

四、扩展场景

  • 多数据库支持
    注入多个 DbContext 并在事务中协调(需要分布式事务支持)。

  • 自定义过滤逻辑
    CheckTransactionalAttribute 中添加更复杂的判断逻辑(如基于用户角色)。

  • 与现有过滤器集成
    通过 Order 属性控制过滤器的执行顺序。


总结

通过此方案,开发者可以灵活控制事务的启用和配置,同时保持代码简洁性和数据一致性。

http://www.dtcms.com/wzjs/337098.html

相关文章:

  • 上海网站营销牡丹江seo
  • 各大网站rss地址软文广告案例分析
  • 正能量网站入口不用下载免费宁波seo网络推广定制
  • 江门网站制作计划百度官方优化指南
  • 网站建设是什么意思 打不开小红书sem是什么意思
  • 哪个女装网站做的好今日国内新闻10则
  • 泉州手机网站建设百度推广优化师是什么
  • 互联网应用在哪些领域北京seo方法
  • 哈尔滨最新情况西安百度提升优化
  • 国外家居设计网站海淀搜索引擎优化seo
  • 制作网页与网站开发百度智能小程序怎么优化排名
  • 做理财网站数字化营销怎么做
  • 博彩导航网站怎么做国内真正的免费建站
  • 福州如何做百度的网站推广网站模板购买
  • 锡盟建设工程造价工程管理网站hyein seo是什么牌子
  • 做网站公司 衡阳公司品牌策划运营公司
  • 代做毕业项目哪个网站好东莞百度快速排名
  • 虾皮跨境电商app下载怎样做seo搜索引擎优化
  • 禹州网站建设seo知识是什么意思
  • 济南营销网站制作如何在百度提交网站
  • 东营设计网站建设百度网站域名注册
  • 自己怎么做农好产品网站汕头网站建设优化
  • 石岩做网站seo排名需要多少钱
  • 网站后台怎么做alt标签seo优化托管
  • 东莞p2p网站开发费用企业文化内容范本
  • 成功营销网站苏州网站建设方案
  • 台州网站建设技术外包网络营销咨询服务
  • 邯郸哪里可以学建网站搜索引擎排行榜前十名
  • 做机械设备类网站用什么颜色好芭嘞seo
  • it培训网站什么是软文文案