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

我有一个使用实体框架的项目。在调用SaveChangesmy时DbContext,出现以下异常:


System.Data.Entity.Validation.DbEntityValidationException:对一个或多个实体的验证失败。有关更多详细信息,请参见'EntityValidationErrors'属性。


一切都很好,但我不想每次发生此异常时都附加一个调试器。而且,在生产环境中,我无法轻松地连接调试器,因此,我必须竭尽全力来重现这些错误。


如何查看隐藏在其中的详细信息DbEntityValidationException?


料青山看我应如是
浏览 964回答 3
3回答

浮云间

我发现在每条消息中同时获取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);    }}

繁花不似锦

在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
打开App,查看更多内容
随时随地看视频慕课网APP