插入重复记录时出错

本文关键字:出错 记录 插入 | 更新日期: 2023-09-27 17:57:42

我有这个代码来提交

 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语句不起作用,我收到了这个错误:

无法在对象"dbo"中插入重复的键行。具有唯一索引"IX_NomeClienteDoCliente"的ClienteDoCCliente。重复的键值为(客户端名称测试)。语句已终止。

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

我需要更改什么以避免此消息?

插入重复记录时出错

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

您需要为这种异常(或catch-all)再添加一个catch,或者如果您当前的catch代码是针对这个问题的,请更正您正在捕获的异常。

您得到的错误消息可能会告诉重复记录的确切异常;如果没有,您可以尝试在手册中找到它,或者捕获更高级别的异常并在调试器中检查确切的异常是什么。