//using FreeSql; //using Microsoft.AspNetCore.Mvc.Filters; //using System; //using System.Collections.Generic; //using System.Data; //using System.Text; //using System.Threading.Tasks; //namespace FreeSql //{ // /// // /// 使用事务执行,请查看 Program.cs 代码开启动态代理 // /// // [AttributeUsage(AttributeTargets.Method)] // public class TransactionalAttribute : DynamicProxyAttribute, IActionFilter // { // public Propagation Propagation { get; set; } = Propagation.Required; // public IsolationLevel IsolationLevel { get => _IsolationLevelPriv.Value; set => _IsolationLevelPriv = value; } // IsolationLevel? _IsolationLevelPriv; // [DynamicProxyFromServices] //#pragma warning disable IDE0044 // 添加只读修饰符 // UnitOfWorkManager _uowManager; //#pragma warning restore IDE0044 // 添加只读修饰符 // IUnitOfWork _uow; // public override Task Before(DynamicProxyBeforeArguments args) => OnBefore(_uowManager); // public override Task After(DynamicProxyAfterArguments args) => OnAfter(args.Exception); // //这里是为了 controller // public void OnActionExecuting(ActionExecutingContext context) => OnBefore(context.HttpContext.RequestServices.GetService(typeof(UnitOfWorkManager)) as UnitOfWorkManager); // public void OnActionExecuted(ActionExecutedContext context) => OnAfter(context.Exception); // Task OnBefore(UnitOfWorkManager uowm) // { // _uow = uowm.Begin(this.Propagation, this._IsolationLevelPriv); // return Task.FromResult(false); // } // Task OnAfter(Exception ex) // { // try // { // if (ex == null) _uow.Commit(); // else _uow.Rollback(); // } // finally // { // _uow.Dispose(); // } // return Task.FromResult(false); // } // } //}