【问题标题】:properly handling "The DELETE statement conflicted with the REFERENCE constraint" exception正确处理“DELETE 语句与 REFERENCE 约束冲突”异常
【发布时间】:2014-06-05 00:10:02
【问题描述】:

我使用 EF 作为 ORM 并在删除记录时遇到异常

"The DELETE statement conflicted with the REFERENCE constraint "FK_dbo.Students_dbo.Classes_Class_ClassID". The conflict occurred in database "Demo.DataAccess.DemoContext", table "dbo.Students", column 'Class_ClassID'.
    The statement has been terminated."

我可以理解是因为这条记录的 PK 在其他表的记录中被引用为 FK。问题是如何妥善处理?我的代码正在处理ConstrainExceptionsQLException,但这个错误并没有被他们捕获,而是由Exception 处理,请看下面的代码:

public void  DeleteClass(int Id)
    {
        try
        {
            unitOfWork.ClassRepository.Delete(Id);
            unitOfWork.Save();
        }
        catch (ConstraintException e)
        {
            throw e;
        }

        catch (SqlException e)
        {
            throw;
        }
        catch (Exception e)
        {
            throw e;
        }
    }

问题: 具体如何处理?异常处理每个错误,但我需要知道这个“约束”异常何时触发。根据异常类型,我需要做不同的事情。

【问题讨论】:

  • 打开快速观察窗口并运行e.GetType().Name
  • @Malk 谢谢,它是 DbUpdateException,我使用了它,但我仍然认为这个类可以处理多个异常,这些异常可以在更新时发生。请指导我如何知道为什么会发生此异常。请帮忙。
  • @Malk,因为更新时可能会出现不同的错误。其中之一将是参考约束,以显示我需要捕捉或确切知道为什么会发生这种情况的消息。请指导。
  • 我快速浏览了一下,似乎很难找到 MSDN 参考页面。我对 EF 的了解不够,无法提供帮助,但我会首先手动检查异常并寻找我可以使用的标志(如 e.InnerException、e.HResult、e.Data、e.Message)。祝你好运!

标签: c# asp.net .net entity-framework


【解决方案1】:

试试这个

catch (DbEntityValidationException e)

干杯

【讨论】:

  • 它看起来很优雅的解决方案,但它是否可用于 EF 5 ?我可以找到它的组件。
  • 是的,应该可以看到下面的链接msdn.microsoft.com/en-us/library/…
  • 嗨,hannsi,你解决了这个问题吗?
猜你喜欢
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
相关资源
最近更新 更多