首页 > 解决方案 > 发生异常时回滚 DbContext 更改

问题描述

我创建了 2 个存储库,它们使用相同的 DbContext

MyRepo1 myRepo1 = new MyRepo1(_DBContext);
MyRepo2 myRepo2 = new MyRepo2(_DBContext);

try
{
    // Put in transaction
    using (var transaction = myRepo1.BeginDBTransaction())
    {
        try
        {
            // Some operations here on myRepo1
            myRepo1.SaveChanges();
            transaction.Commit();
        }
        catch (Exception ex)
        {
            transaction.Rollback();
            throw new Exception("Error processing data");
        }
    }    
}
catch (Exception ex)
{
    sb.Append("Error = " + ex.ToString() + ".");
}
finally
{        
    myRepo2.LogData(data);
}

问题是,假设 myRepo1 操作出错(即调用 myRepo1 时出现异常),我想回滚事务。在回滚点,它似乎很好。

但是当我打电话时myRepo2.LogData(data),它会像我打电话时一样抛出同样的错误myRepo1.SaveChanges()。似乎由于在 myRepo1 中完成的上下文更改在调用transaction.Rollback(). 如何解决这个问题?

标签: c#entity-framework-core

解决方案


推荐阅读