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

数据库操作预计会影响 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();的时候就不会再报错了。

猜你喜欢

转载自blog.csdn.net/qq_37213281/article/details/120885158