DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.27k stars 1.33k forks source link

官方能不能支持AOP事务 #1109

Closed my6521 closed 1 year ago

DotNetNext commented 1 year ago

AOP事务是什么意思 方法特性加事务吗

my6521 commented 1 year ago

是的,方法上加拦截事务

DotNetNext commented 1 year ago

https://www.donet5.com/Home/Doc?typeId=1183 标题10有用例

my6521 commented 1 year ago

使用AspectCore的拦截可以这样写吗?

public class TransactionAttribute : AbstractInterceptorAttribute
{
    public IsolationLevel Level { get; set; } = IsolationLevel.Unspecified;
    public async override Task Invoke(AspectContext context, AspectDelegate next)
    {
        var sqlSugarClient = context.ServiceProvider.GetService<ISqlSugarClient>();

        var inTransaction = sqlSugarClient.Ado.Transaction != null;
        if (inTransaction)
        {
            await next.Invoke(context); return;
        }

        try
        {
            sqlSugarClient.Ado.BeginTran(Level);

            await next(context);

            sqlSugarClient.Ado.CommitTran();
        }

        catch
        {
            sqlSugarClient.Ado.RollbackTran();
        }

    }
}
DotNetNext commented 1 year ago

可以的 你这个是scope周期的注入吧

my6521 commented 1 year ago

是scope,没问题吧?

DotNetNext commented 1 year ago

是的 单库用db.ado是OK的

my6521 commented 1 year ago

这样是同一个ISqlSugarClient的事务就没问题

DotNetNext commented 1 year ago

是的

my6521 commented 1 year ago

嵌套也解决了

DotNetNext commented 1 year ago

可以的

my6521 commented 1 year ago

ok,tks

DotNetNext commented 1 year ago

先关闭,如果还有问题可以发新的issues