排查 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; // 重新抛出异常或处理
              }
相关推荐
碎光拾影3 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
曾阿伦3 小时前
MongoDB 查询语句备忘手册
数据库·mongodb
一叶龙洲3 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
CCPC不拿奖不改名3 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
爬也要爬着前进5 小时前
redis主从搭建
数据库·redis·缓存
@Mike@5 小时前
02-数据库学习笔记(SQL引擎)
数据库·笔记·学习
踏月的造梦星球6 小时前
达梦数据库执行计划与性能分析入门:EXPLAIN、AUTOTRACE 与 ET
服务器·数据库·oracle
笃行3506 小时前
国产化落地避坑 · 干货向|Oracle 迁金仓 KES,我把外连接消除排在隐性陷阱第一位
数据库
老纪的技术唠嗑局7 小时前
花一年时间整理出的:AI 数据库混合搜索入门实践
数据库
川石课堂软件测试7 小时前
安全测试|常见SQL注入攻击方式、实例及预防
服务器·数据库·sql·功能测试·测试工具·安全·单元测试