错误而插入重复记录

问题描述:

我有这样的代码做承诺错误而插入重复记录

public RetornoDTO Commit(EfDbContext _context) 
    { 
     string erroValidation = String.Empty; 
     try 
     { 
      _context.SaveChanges(); 
     } 

     catch (DbEntityValidationException e) 
     { 
      foreach (var eve in e.EntityValidationErrors) 
      { 
       var erro = 
        string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", 
         eve.Entry.Entity.GetType().Name, eve.Entry.State); 

       Logger.GetInstance().Erro(erro); 
       foreach (var ve in eve.ValidationErrors) 
       { 
        erroValidation = string.Format("- Property: \"{0}\", Error: \"{1}\"", 
         ve.PropertyName, ve.ErrorMessage); 
        Logger.GetInstance().Erro(erroValidation); 
       } 
      } 
      return new RetornoDTO 
      { 
       Sucesso = false, 
       Mensagem = "Error - Erro " + erroValidation 
      }; 
     } 
     return new RetornoDTO { Sucesso = true, Mensagem = "Changes saved!!!" }; 
    } 

但是,当我尝试插入重复记录catch语句不工作,我收到此错误:

Cannot insert duplicate key row in object 'dbo.ClienteDoCliente' with unique index 'IX_NomeClienteDoCliente'.The duplicate key value is (Cliente Name Test). The statement has been terminated.

Linha 30:    try 
Linha 31:    { 
Linha 32:     _context.SaveChanges(); 
Linha 33:    } 
Linha 34:    catch (DbEntityValidationException e) 

我需要改变以避免此消息?

+0

您正在尝试保存具有唯一约束的数据。更改插入的数据 –

+0

是的,我希望代码不会显示堆栈错误,但会自定义错误并将错误记录到数据库中。 – b3r3ch1t

你的捕获只是捕获DbEntityValidationException。插入重复记录不是DbEntityValidationException,而是另一个异常。

您需要为该类型的异常(或全部捕获)添加更多的catch,或者如果您当前的代码是针对此问题的,请更正您正在捕获的异常。

您收到的错误消息可能会说明重复记录的确切例外情况;如果没有,您可以尝试在手册中找到它,或者捕获更高级别的异常,并在调试器中检查确切的异常情况。