排查 EF 保存数据时提示:Validation failed for one or more entities 的问题
前言
今天有一个使用 EF 的项目遇到了一个这样的异常问题:“Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.”。
这个错误提示表明,在尝试将实体保存到数据库时,一个或多个实体的验证失败了。但是,错误消息本身并没有提供足够的详细信息来指出是哪个具体的属性或字段导致了验证失败,而且这个表的字段比较多不好一个一个的去排查具体是哪个字段的问题。这里分享一个比较实用的技巧,能够帮助我们快速定位数据验证错误问题。
排查方法
以下这段代码的目的是为了在使用 EF 进行数据库操作时,提供一个优雅的方式来捕获和处理验证失败的情况,同时提供详细的错误信息以帮助开发者快速定位问题。
- EntityValidationErrors: 包含了所有验证失败的实体的错误信息。
- ValidationErrors: 包含了验证失败的实体所有属性的验证错误(DbValidationError),例如必填字段未赋值、长度超限等。每个错误会明确标注 PropertyName(属性名)和 ErrorMessage(错误原因)。
try
{
// .....
// 数据库操作(例如 SaveChanges())
}
catch (DbEntityValidationException ex)
{
foreach (var entityError in ex.EntityValidationErrors)
{
Console.WriteLine($"实体名称: {entityError.Entry.Entity.GetType().Name}");
foreach (var validationError in entityError.ValidationErrors)
{
// 输出具体错误信息
Console.WriteLine($"属性名称: {validationError.PropertyName}");
Console.WriteLine($"错误原因: {validationError.ErrorMessage}");
}
}
throw; // 重新抛出异常或处理
}
作者名称:追逐时光者
作者简介:一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。

浙公网安备 33010602011771号