EF异常:对一个或多个实体的验证失败

2020年4月13日21:24:14来源:CSDN 6 42 493字阅读1分38秒
摘要

使用EF进行实体操作(保存、更新等)时,有时可能引发异常:对一个或多个实体的验证失败 。此异常是由于操作的数据与映射配置中的检查约束冲突导致的。

问题

使用EF进行实体操作(保存、更新等)时,有时可能引发异常:对一个或多个实体的验证失败 。此异常是由于操作的数据与映射配置中的检查约束冲突导致的。

比如,一个user表,定义name字段长度最大为10,如果保存的实体类name字段长度为11,那么则会抛出此异常。

解决方案

那么如何找到具体没有通过验证的字段及其原因呢?这就是本文的目的。方法如下:

对引发异常的语句进行异常捕获,会捕获一个DbEntityValidationException异常,此异常有一个EntityVlidateErrors字段,这是一个集合,里面是未通过验证的字段及其原因信息,查看它的内容,如下图,即可得到你想要的信息。

错误的思路

网上有很多地方提供的解决方案是:关闭ef的实体检查,这是掩耳盗铃,没有意义

Ef通过实体映射来定义实体和数据的关系,理论上来说,实体映射中定义的数据结构和约束等信息和数据库中的定义应该是相同的,如果一个实体未能通过实体映射的检查,那么即使执行了插入或者更新数据的命令,也会导致sqlException。退一步讲,即使没有导致sqlexception,这也不是一种很为危险的处理方式。

weinxin
微信公众号
博客微信公众号,欢迎关注。
avatar
  • 版权声明 本文源自 CSDN 整理 发表于 2020年4月13日21:24:14
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接。
硅云免费虚拟主机
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:6   其中:访客  3   博主  3
    • avatar 小石 5

      (每一个字和字母都认识,但是看不懂 :mrgreen:

        • avatar 萧瑟

          @ 小石 大佬谦虚了,毕竟C#快没落了,现在开发比较火的基本上都是php/java/python之类的。 :cool:

        • avatar 风也 2

          奇怪的bug又增加啦

            • avatar 萧瑟

              @ 风也 这个是一同事遇到的,我帮他找了一下解决方案,不过,我基本上没遇到这个问题。 :lol:

            • avatar 叶先生博客 4

              网上的教程我顶多信一半,很多情况和自己遇到的都不相符,不过用来借鉴还是可以的

                • avatar 萧瑟

                  @ 叶先生博客 确实,不过有些教程确实不怎么样,而且更新比较慢,好多都是旧版本的。