最简单的解决方案是覆盖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/