本篇目錄
問題####
問題的是在下面這種情況下出現的:
我在使用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。