本篇目录
问题
问题的是在下面这种情况下出现的:
我在使用CodeFirst更新了数据库后,然后数据库中产生数据表了,几个表中也都有数据。问题的主要原因是跟AbpUsers表有关的。
一开始AbpUsers表的数据是这样的:
我直接删除了AbpUsers表中的数据,然后想重新运行一下种子方法,结果再次生成了和之前一样的数据,但是由于Id是自增长的,Id分别变成了3和4。最关键的,是这个表中有个LastModifierUserId字段,该字段保存的是上次登录系统的用户Id。
第二次更新数据库之后,再次登录系统时报错了,详细信息如下:
{"UPDATE 语句与 FOREIGN KEY SAME TABLE 约束"FK_dbo.AbpUsers_dbo.AbpUsers_LastModifierUserId"冲突。该冲突发生于数据库"QrCodeCMSMZ",表"dbo.AbpUsers", column 'Id'。\r\n语句已终止。"}
原因
从提示的错误只能看出“更新数据库时与AbpUsers表的LastModifierUserId字段发生了冲突”,再也得不到其他信息了。
最终,我发现的原因是用户登录时都会将UserId保存到Cookie中,然后再次登录时会将Cookie中的UserId更新到数据库中。由于我之前的UserId是2,保存到Cookie中,然后再次登录时用2更新数据库,但是此时数据库中已经没有UserId为2的用户了,所以就发生了冲突的错误。
本人用的ABP版本是v0.7.5.0。
解决办法
解决办法就是清除Cookie。
在Chrome浏览器中清除Cookie的方法如下:
F12进入开发者工具,选择Resources选项卡,选择Cookies,点击选择对应的域名,右键选择Clear即可清除该站点下的所有Cookie。