自增ID相同时报错: Database operation expected to affect 1 row(s) but actually affected 2 row(s)...

发布时间 2023-04-06 18:19:36作者: 韩梦芫

数据库操作预计会影响 1 行,但实际上影响了 2 行。 自加载实体以来,数据可能已被修改或删除。 有关理解和处理乐观并发异常的信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=527962。

项目场景:
使用EF进行数据修改并保存_dbContext.SaveChanges();的时候出现错误

问题描述:
在EF里面进行修改的时候出现错误,报错:中文意思(数据库操作预计会影响 1 行,但实际上影响了 2 行。 自加载实体以来,数据可能已被修改或删除。 有关理解和处理乐观并发异常的信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=527962。)在网上搜索了许多都没找到原因。并且添加没有问题!

原因分析:
因为里面新增的数据再修改没有问题,但是之前的历史数据修改却报错,想到是数据问题,吧正确数据和错误数据对了一遍,么有发现什么问题。然后就开始想是否为触发器的原因,还有它的一些约束,但是发现就算吧触发器删除掉也是一样有问题。非常纳闷。这时候有个同事说 可能是数据不唯一的原因,所以就开始在数据库group by查找数据是否唯一。

解决方案:
最后发现还真是数据不唯一的原因,要修改的数据的自增列竟然不唯一。是的,因为有一部分是我从另一个数据库导进来的数据,所以导致了自增列id竟然有很多重复的。原以为导进来的数据自增列会自动往下排,没想到是保持原来的自增信息。所以吧自增id相同的id删除掉值保留一个,然后在项目里面,ef在_dbContext.SaveChanges();的时候就不会再报错了。
————————————————
版权声明:本文为CSDN博主「qq_490824614」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37213281/article/details/120885158