最简单的解决方案是
SaveChanges在实体类上重写。您可以捕获
DbEntityValidationException,解开实际的错误并
DbEntityValidationException使用改进后的消息创建新的错误。
- 在SomethingSomething.Context.cs文件旁边创建一个局部类。
- 使用本文底部的代码。
- 而已。您的实现将自动使用覆盖的SaveChanges,而无需进行任何重构工作。
您的异常消息现在将如下所示:
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/



