【发布时间】: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。问题是如何妥善处理?我的代码正在处理ConstrainException 和sQLException,但这个错误并没有被他们捕获,而是由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