首页 > 解决方案 > 处理 context.saveChanges() 中每个实体的异常

问题描述

是否可以获得捆绑中每个实体的保存失败的特定异常?

saveChanges() 的简单使用为所有 bandle 提供了一个例外。

这是我的带有 try-catch 块的代码:

  foreach (EntityBase ent in response.Entities)
            {
                try
                {
                    //save each ent ?
                }
                catch (DbEntityValidationException ex){...}
                catch (DbUpdateException e) { ...}

                catch (Exception ex){...}
            }

标签: c#exceptionado.netentity-framework-6

解决方案


在您对附加/跟踪的实体进行每次更改后,都需要调用 save changes。

我建议不要这样做,因为它可能会根据您要提交的更改数量减慢您的应用程序。如果您确实决定这样做,并且在发生故障时想要回滚先前的更改,则需要在运行整个更改集后添加一个您提交/回滚的包装事务。您还必须在失败后手动分离/恢复更改,以便下一次更改时的下一次保存更改不会触发刚刚发生的上一次失败。执行后者的最简单方法可能是分离该实体或重新创建DbContext实例。


如果您想在保存到 DbContext之前进行验证,请查看之前的问题和答案。它无法捕获所有错误,例如对唯一索引的约束,但它可以捕获违反数据约束的任何错误,例如缺少必需的值:在保存和从上下文中删除之前验证实体


推荐阅读