为了账号安全,请及时绑定邮箱和手机立即绑定

DbEntityValidationException-如何轻松分辨出导致错误的原因?

DbEntityValidationException-如何轻松分辨出导致错误的原因?

C#
料青山看我应如是 2019-12-07 16:23:03
我有一个使用实体框架的项目。在调用SaveChangesmy时DbContext,出现以下异常:System.Data.Entity.Validation.DbEntityValidationException:对一个或多个实体的验证失败。有关更多详细信息,请参见'EntityValidationErrors'属性。一切都很好,但我不想每次发生此异常时都附加一个调试器。而且,在生产环境中,我无法轻松地连接调试器,因此,我必须竭尽全力来重现这些错误。如何查看隐藏在其中的详细信息DbEntityValidationException?
查看完整描述

3 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

我发现在每条消息中同时获取POCO类名和属性名很有用,并希望避免为此而ErrorMessage在所有[Required]标签上编写自定义属性。


以下对Martin代码的调整为我解决了这些细节:


// Retrieve the error messages as a list of strings.

List<string> errorMessages = new List<string>();

foreach (DbEntityValidationResult validationResult in ex.EntityValidationErrors)

{

    string entityName = validationResult.Entry.Entity.GetType().Name;

    foreach (DbValidationError error in validationResult.ValidationErrors)

    {

        errorMessages.Add(entityName + "." + error.PropertyName + ": " + error.ErrorMessage);

    }

}


查看完整回答
反对 回复 2019-12-07
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

在catch {...}块中处于调试模式时,打开“ QuickWatch”窗口(ctrl+ alt+ q)并粘贴在其中:


((System.Data.Entity.Validation.DbEntityValidationException)ex).EntityValidationErrors

这将允许您深入到ValidationErrors树中。这是我发现的即时了解这些错误的最简单方法。


对于只关心第一个错误并且可能没有catch阻止的Visual 2012+用户,您甚至可以执行以下操作:


((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors.First().ValidationErrors.First().ErrorMessage


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 965 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信