我有一段try catch代码:

try
{
    ...
}
catch(Exception ex)
{
    ModelState.AddModelError(
        "duplicateInvoiceNumberOrganisation", "The combination of organisation and invoice number must be unique");
}

对于这段代码,我试图将记录插入数据库:dba对其进行了设置,以便数据库检查重复项,如果存在重复项,则返回错误。如您所见,当前,无论发生什么错误,我都将相同的错误添加到模型中。我希望它已更改,因此,如果该错误是由dba设置的重复错误引起的,则仅将其添加到模型中。

以下是我要捕获的错误。请注意,这是内部异常。谁能告诉我如何特别抓到这个?

最佳答案

在您当前捕获的之前的中添加以下内容:

catch(DbUpdateException ex)
{
  if(ex.InnerException is UpdateException)
  {
    // do what you want with ex.InnerException...
  }
}

在C#6中,您可以执行以下操作:
catch(DbUpdateException ex) when (ex.InnerException is UpdateException)
{
    // do what you want with ex.InnerException...
}

10-08 01:53