c# - 发生异常时回滚 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()
. 如何解决这个问题?
解决方案
推荐阅读
- blazor - Blazor 服务器端,无需强制重新加载的错误处理?
- domain-driven-design - 如何处理 DDD/CQRS 中的硬聚合范围约束?
- laravel - Laravel mix - 为每个条目设置不同的插件选项
- visual-studio-code - Visual Studio Code“从 Microsoft 设置同步”与“从 Shan Khan 设置同步”
- reactjs - 带有 React Quill 和 Firebase Firestore 的评论回复系统
- python - 使用 pybind11 导出到 python 的类函数的额外打印
- sas - 将 PROC MEANS 的结果保存在工作表中
- javascript - 如何在滚动行未结束时修复列?
- airflow - 无法让 Airflow DAG 每天在特定时间运行
- flutter - 我得到太少的位置参数错误颤动,我不明白为什么?