记录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增删改时,底层启用实体验证且记录日志是非常必要的,特别是代码到了线上,如果没有日志,系统出异常的时候,简直无从下手……
记录EntityValidationErrors的详细信息的更多相关文章
- Asp.Net MVC4入门指南(9):查询详细信息和删除记录
在本教程中,您将查看自动生成的Details和Delete方法. 查询详细信息和删除记录 打开Movie控制器并查看Details方法. public ActionResult Details(int ...
- 使用Ef时,对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。
EntityValidationErrors 关于如何查看 EntityValidationErrors 详细信息的解决方法 我们在 EF 的编程中,有时候会遇到这样一个错误: 但是,按照他的提示 ...
- EF5.0 对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性
使用asp.net+EF5.0练习的时候,遇到这样一个问题: 对一个或多个实体的验证失败.有关详细信息,请参见“EntityValidationErrors”属性 但是感到很疑惑,去百度,说是关闭EF ...
- Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法;关于如何查看 EntityValidationErrors 详细信息的解决方法
我们在 EF 的编程中,有时候会遇到这样一个错误: 但是,按照他的提示 "See 'EntityValidationErrors' property for more details.&qu ...
- “未处理DbEntityValidationException”,"对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性"。
对一个或多个实体的验证失败.有关详细信息,请参阅“EntityValidationErrors”属性. 问题原因可能是: 1. 非空列未插入值错误 2. 多个表间外键列长度不一样 3. ef上下文对象 ...
- 使用EF保存数据时 提示: 其他信息: 对一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。
错误提示: 解决方法: →使用try...catch捕获→在catch所在行打上断点,运行,对ex添加监视或者运行到ex的时候 按Shift+f9天假快速监视→在EntityValidationEr ...
- [课程设计]Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计)
Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点 ...
- [SVN(Ubuntu)] SVN 查看历史详细信息
转载: http://lee2013.iteye.com/blog/1074457 以下内容,对ubuntu命令行查看代码变化非常有用. SVN 查看历史信息 通过svn命令可以根据时间或修订号去除过 ...
- 钉钉开发入门,微应用识别用户身份,获取用户免登授权码code,获取用户userid,获取用户详细信息
最近有个需求,在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去企业内部的用户中心做校验,校验通过,相关子系统直接登陆; 就是在获取这个用户身份的时候,网上的资料七零八落的,找的人烦躁的很,所 ...
随机推荐
- JPA(五):映射关联关系------映射单向多对一的关联关系
映射单向多对一的关联关系 新建Customer.java: package com.dx.jpa.singlemanytoone; import java.util.Date; import java ...
- Java-JUC(一):volatile引入
问题背景: volatile是为了解决内存可见性而生的,什么是内存不可见性呢? 以下边的代码为例: package com.dx.juc; public class VoltileTest { pub ...
- 让人郁闷的.net
一个旧项目,.net 2.0的,因为一个小改动,mongo数据库加了密码,结果折腾两天却无法解决,让人郁闷的地方太多: .net版本多,用的原来的驱动是1.7的,在.net 2.0就可以,mongo服 ...
- Setting a maximum attachment size
By default IBM® Lotus® iNotes™ allows a maximum attachment size of 50,000K (50MB). You can increas ...
- RobotFramework+Selenium2+Appium环境搭建
转载:https://www.cnblogs.com/testway/p/7372326.html 装python 2.7 RobotFramework是python2 写的,图形界面使用的wxpyt ...
- LCX端口内网映射转发
这几天在渗透一家奶茶店的时候, 使用溢出攻击获得了奶茶店shell, 截屏以后发现该电脑有安装sqlserver, 但是数据库无法远程连接, 所以我决定使用端口映射工具突破端口连接限制: 我的机器地址 ...
- php获取当前时间的方法
1.获取当前时间 date('Y-m-d H:i:s', time()) 2.字符串转时间 date('Y-m-d H:i:s',strtotime('2018-8-21 22:00:00'))
- mktime 和 TZ
mktime底层使用__tz_convert,可能会比较慢 http://blog.csdn.net/aquester/article/details/54669264 http://blog.csd ...
- Percona-XtraBackup系列二:备份恢复
#在备份较大数据量的时候推荐xtrabackup,这个工具比mysqldump要快很多. 一.Xtrabackup介绍 1,Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备 ...
- Spring学习笔记六:Spring整合Hibernate
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6785323.html 前言:整合概述 Spring整合Hibernate主要是把Hibernate中常用的S ...