在 Furion + SqlSugar 中使用 UnitOfWork 特性时,需要确保在方法内部使用的 SqlSugarScope 是通过 Furion 提供的 SqlSugarScopeFactory 创建的。

当抛出异常时,Furion 会自动回滚事务。但是需要注意以下几点:

  1. 确保方法内部使用的 SqlSugarScope 是通过 Furion 提供的 SqlSugarScopeFactory.CreateScope() 方法创建的,而不是直接使用 SqlSugarScope 的构造函数创建的。只有通过 SqlSugarScopeFactory 创建的 SqlSugarScope 才会被 Furion 识别并进行事务管理。

  2. 确保方法内部的异常被正确地抛出,即不要在 catch 块中捕获异常并不再抛出。Furion 只会回滚事务,而不会处理异常。

  3. 确保在方法内部使用的 SqlSugarScope 被正确地释放。可以使用 using 语句来确保 SqlSugarScope 在方法执行完毕后被释放,从而触发事务的提交或回滚。

下面是一个使用 Furion + SqlSugar 的示例代码:

[UnitOfWork]
public async Task UpdateDataAsync()
{
    using (var scope = _sqlSugarScopeFactory.CreateScope())
    {
        try
        {
            // 更新数据的操作
            await _repository.UpdateAsync(entity);
            
            // 手动抛出一个异常
            throw new Exception('抛出异常');
            
            scope.SaveChanges(); // 提交事务
        }
        catch (Exception ex)
        {
            // 异常处理逻辑
            throw ex; // 确保异常被正确地抛出
        }
    }
}

在上述示例中,当抛出异常时,Furion 会自动回滚事务,不会对数据库进行修改。

Furion + SqlSugar UnitOfWork 特性: 事务回滚指南

原文地址: https://www.cveoy.top/t/topic/qnJR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录