Skip to content

使用freesql.Transaction事物时 如果是数据库抛出异常则当前整个事务无效并且try也无法拦截,如果是自己手动抛出则可以拦截 #2109

@929496959

Description

@929496959

如题

问题描述及重现代码:

try
{
    freeSqlObj.Transaction(() => {
        var rows = freeSqlObj.Update<OrderEntity>()
                .SetDto(new { code = "1111" })
                .Where(x => x.Id == 1)
                .ExecuteAffrows();
        //if (rows <= 0)
        //    throw new Exception("11111");
        Console.WriteLine($"数据库影响行数:{rows}!");
        try
        {
            rows = freeSqlObj.Update<UserEntity>()
                    .SetDto(new { code = Guid.NewGuid().ToString("N") })//(string)null
                    .Where(x => x.Id == 1)
                    .ExecuteAffrows();
            if (rows <= 0)
                throw new Exception("11111");  //这个异常可以拦截 并不影响上一句话
            Console.WriteLine($"数据库影响行数:{rows}!");

            rows = freeSqlObj.Update<UserEntity>()
                   .SetDto(new { code = (string)null })//这个值数据库不能为空,这里数据库抛出异常 拦截后 会导致整个事务回滚 try拦截无效
                   .Where(x => x.Id == 1)
                   .ExecuteAffrows();
            Console.WriteLine($"数据库影响行数:{rows}!");
        }
        catch (Exception e)
        {
            Console.WriteLine("数据库异常!");
        }
        rows = freeSqlObj.Update<SqlLogEntity>()
                .SetDto(new { code = Guid.NewGuid().ToString("N") })
                .Where(x => x.Id == 1)
                .ExecuteAffrows();

        Console.WriteLine($"数据库影响行数:{rows}!");
    });
}
catch (Exception e)
{
    Console.WriteLine($"数据库执行:{e.Message}!");
}

数据库版本

sql server 2012 sp1

安装的Nuget包

FreeSql.All V 3.5.213

.net framework/. net core? 及具体版本

. net 8.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions