写点什么

排查 EF 保存数据时提示:Validation failed for one or more entities 的问题

作者:追逐时光者
  • 2025-10-18
    广东
  • 本文字数:990 字

    阅读完需:约 3 分钟

前言

今天有一个使用 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 小时前阅读数: 6
用户头像

不积跬步无以至千里,不积小流无以成江海! 2020-01-14 加入

微软MVP、华为云HCDE、华为云云享专家、51CTO专家博主、阿里云专家博主、博客园推荐博客、CSDN博客专家、腾讯云创作之星、掘金优秀创作者,一个热爱开源的全栈软件工程师,擅长C#、.NET、Vue等相关技术开发。

评论

发布
暂无评论
排查 EF 保存数据时提示:Validation failed for one or more entities 的问题_.net_追逐时光者_InfoQ写作社区