我有一个使用实体框架的项目。在调用SaveChangesmy时DbContext,出现以下异常:
SaveChanges
DbContext
System.Data.Entity.Validation.DbEntityValidationException:对一个或多个实体的验证失败。有关更多详细信息,请参见’EntityValidationErrors’属性。
一切都很好,但我不想每次发生此异常时都附加一个调试器。而且,在生产环境中,我无法轻松地连接调试器,因此,我必须竭尽全力来重现这些错误。
如何查看隐藏在其中的详细信息DbEntityValidationException?
DbEntityValidationException
最简单的解决方案是SaveChanges在实体类上重写。您可以捕获DbEntityValidationException,解开实际的错误并DbEntityValidationException使用改进后的消息创建新的错误。
您的异常消息现在将如下所示:
System.Data.Entity.Validation.DbEntityValidationException:对一个或多个实体的验证失败。有关更多详细信息,请参见’EntityValidationErrors’属性。验证错误是:字段PhoneNumber必须是最大长度为‘12’的字符串或数组类型;姓氏字段是必填字段。
您可以将重写的SaveChanges放在继承自的任何类中DbContext:
public partial class SomethingSomethingEntities { public override int SaveChanges() { try { return base.SaveChanges(); } catch (DbEntityValidationException ex) { // Retrieve the error messages as a list of strings. var errorMessages = ex.EntityValidationErrors .SelectMany(x => x.ValidationErrors) .Select(x => x.ErrorMessage); // Join the list to a single string. var fullErrorMessage = string.Join("; ", errorMessages); // Combine the original exception message with the new one. var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage); // Throw a new DbEntityValidationException with the improved exception message. throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors); } } }
该DbEntityValidationException还包含导致验证错误的实体。因此,如果您需要更多信息,则可以更改上面的代码以输出有关这些实体的信息。
另请参阅: http : //devillers.nl/improving- dbentityvalidationexception/