zoukankan      html  css  js  c++  java
  • 记录EntityValidationErrors的详细信息

    0.一个问题

    使用过EF的人相信都会遇到Validation failed for one or more entities. See ‘EntityValidationErrors’这种异常,这是由于EF在写入数据库前对实体验证不通过引起的异常(如果没有设置Configuration.ValidateOnSaveEnabled=false的话),由于EF没有将这个异常的详细信息抛到上层,经常无法跟踪到是哪个属性没有验证通过,虽然知道错了,但素还不知道错在哪里啊,怎么改?

    1.在DbContext中记录EntityValidationErrors

    既然你EF吃掉了EntityValidationErrors,那我得让它重新吐出来,先来二两代码:

    复制代码
    public class TestDbContext:DbContext
        {
            public override int SaveChanges()
            {
                try
                {
                    return base.SaveChanges();
                }
                catch (DbEntityValidationException exception)
                {
                    var errorMessages =
                        exception.EntityValidationErrors
                            .SelectMany(validationResult => validationResult.ValidationErrors)
                            .Select(m => m.ErrorMessage);
    
                    var fullErrorMessage = string.Join(", ", errorMessages);
                    //记录日志
                    //Log.Error(fullErrorMessage);
                    var exceptionMessage = string.Concat(exception.Message, " 验证异常消息是:", fullErrorMessage);
    
                    throw new DbEntityValidationException(exceptionMessage, exception.EntityValidationErrors);
                }
    
                //其他异常throw到上层
            }
        }
    复制代码

    相当清真的几行代码就能拿到EF的验证消息,很划算有木有!

    在EF增删改时,底层启用实体验证且记录日志是非常必要的,特别是代码到了线上,如果没有日志,系统出异常的时候,简直无从下手……

  • 相关阅读:
    Python replace()方法
    QQ传输协议分析
    子网与子网掩码的介绍
    每天撸点Linux
    对一次ARP欺骗分析
    中转注入
    第五篇学习笔记
    第四篇学习笔记
    第三篇学习笔记
    第二篇学习笔记
  • 原文地址:https://www.cnblogs.com/Alex80/p/8872734.html
Copyright © 2011-2022 走看看