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

记录EntityValidationErrors的详细信息的更多相关文章

  1. Asp.Net MVC4入门指南(9):查询详细信息和删除记录

    在本教程中,您将查看自动生成的Details和Delete方法. 查询详细信息和删除记录 打开Movie控制器并查看Details方法. public ActionResult Details(int ...

  2. 使用Ef时,对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。

    EntityValidationErrors   关于如何查看 EntityValidationErrors 详细信息的解决方法 我们在 EF 的编程中,有时候会遇到这样一个错误: 但是,按照他的提示 ...

  3. EF5.0 对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性

    使用asp.net+EF5.0练习的时候,遇到这样一个问题: 对一个或多个实体的验证失败.有关详细信息,请参见“EntityValidationErrors”属性 但是感到很疑惑,去百度,说是关闭EF ...

  4. Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法;关于如何查看 EntityValidationErrors 详细信息的解决方法

    我们在 EF 的编程中,有时候会遇到这样一个错误: 但是,按照他的提示 "See 'EntityValidationErrors' property for more details.&qu ...

  5. “未处理DbEntityValidationException”,"对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性"。

    对一个或多个实体的验证失败.有关详细信息,请参阅“EntityValidationErrors”属性. 问题原因可能是: 1. 非空列未插入值错误 2. 多个表间外键列长度不一样 3. ef上下文对象 ...

  6. 使用EF保存数据时 提示: 其他信息: 对一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。

    错误提示: 解决方法: →使用try...catch捕获→在catch所在行打上断点,运行,对ex添加监视或者运行到ex的时候  按Shift+f9天假快速监视→在EntityValidationEr ...

  7. [课程设计]Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计)

    Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计)  1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点 ...

  8. [SVN(Ubuntu)] SVN 查看历史详细信息

    转载: http://lee2013.iteye.com/blog/1074457 以下内容,对ubuntu命令行查看代码变化非常有用. SVN 查看历史信息 通过svn命令可以根据时间或修订号去除过 ...

  9. 钉钉开发入门,微应用识别用户身份,获取用户免登授权码code,获取用户userid,获取用户详细信息

    最近有个需求,在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去企业内部的用户中心做校验,校验通过,相关子系统直接登陆; 就是在获取这个用户身份的时候,网上的资料七零八落的,找的人烦躁的很,所 ...

随机推荐

  1. (转)Unity3D研究院之IOS&Android收集Log文件

    转自:http://www.xuanyusong.com/archives/2477 有段时间没有写过文章了,不知道大伙儿还记得雨松MOMO吗? 嘿嘿. 开发项目的时候尤其在处理与服务器交互这块,如果 ...

  2. LogCat用法2

    如果adb devices显示设备的状态是offline, 这是可以看手机的通知栏,会有一个"触摸以设置USB"这样一个类似的提示,触摸它以后会要求你选择USB的用途,选择第二个' ...

  3. insta经典滤镜下载

    好不容易找到的Insta的经典滤镜源码,贴出来帮大家学习. // // IFImageFilter.m // InstaFilters // // Created by Di Wu on 2/28/1 ...

  4. 具体解说Android的图片下载框架UniversialImageLoader之磁盘缓存(一)

    沉浸在Android的开发世界中有一些年头的猴子们,预计都可以深深的体会到Android中的图片下载.展示.缓存一直是心中抹不去的痛.鄙人亦是如此.Ok,闲话不说.为了督促自己的学习.以下就逐一的挖掘 ...

  5. ACCESS和MSSQL-如何随机读取数据库记录

    查询语句只要这样写,就可以随机取出记录了 SQL="Select top 6 * from Dv_bbs1 where isbest = 1 and layer = 1 order by n ...

  6. VMware虛擬化技術實作問答

    http://www.netadmin.com.tw/article_content.aspx?sn=1202130002&ns=1203280001&jump=3 Q4:啟用VMwa ...

  7. Docker镜像保存save、加载load

    (1)查看要要保存的镜像的ID [root@localhost docker]# docker images (2)保存镜像 [root@localhost docker]# docker save  ...

  8. QtWebkit包含的类简介

    前言 WebKit从Qt 4.4开始被作为一个Module被集成到Qt中.简单的说,Qt webkit就是Qt对Apple公司webkit的支持而开发的库,主要包括以下几个类: QWebDatabas ...

  9. Mavlink地面站编写之二--Mission Planner编译

    软件下载:        本文使用VS2013进行编译和改动Mission Planner,其它版本号没有尝试过. 首先下载Mission Planner源码. https://github.com/ ...

  10. Java 希尔排序

    效率:O(n*logN) package sort; import utils.Util; /** * 希尔排序 * 以h为间隔,进行比較. 按一定公式.先求出最大的间隔h * 当h值大时,须要移动的 ...