當我從頭開始創建新用戶(注冊)并從不依賴于底層數據庫的登錄用戶創建新用戶時,我有這種奇怪的行為(在本例中我使用的是 postgreSQL)。但首先是關系:現在,在注冊時和登錄時,我都使用它UserManager來創建用戶。首先,我創建一個新的UserSetting,SaveChanges()然后將新創建的實體的值分配給該AppUser屬性。UserSettingIdId這是失敗的地方,具體取決于您是否已經是注冊并登錄的用戶或者您是新注冊用戶,代碼不會更改:var userSettings = await _userService.UserSettings.AddAsync(new UserSettings{ LanguageId = langId, ThemeId = themeId});//wrapper to the Context.SaveChangesAsync()//failure point!if (!await _userService.SaveChangesAsync<bool>())異常錯誤(在從已登錄的用戶創建新用戶時)討論了PK_LanguageId已經存在的語言實體,就好像我正在創建一個新的語言實體一樣,但是,如您所見,我只是將默認值分配langId給新的UserSetting. 這是異常截圖:(對不起,意大利語,它會自動翻譯)簡短翻譯: 重復的鍵Languages,就好像它試圖插入一個新Language實體一樣。并且在Startup注冊的服務(_userService)是暫時的。我做錯了什么?為什么它的行為如此不同?是否有其他方法可以從已登錄的用戶創建用戶?
2 回答

隔江千里
TA貢獻1906條經驗 獲得超10個贊
找到了行為的根源,這就是該死的UserManager.GetUserAsync()
,我用它來獲取當前登錄的用戶,UserSettings
稍后添加將“管理員”的設置傳播到新創建的帳戶。
GetUserAsync(User)
確實返回一個持續被跟蹤的實體(而不是像我想的那樣AsNoTracking()
)。因此,當我填充它時,UserSetting
我實際上添加了一個UserSetting
帶有新子類屬性的新屬性!
Sooo,永遠不要指望UserManager
給你沒有跟蹤的用戶!
感謝所有參與其中的人的努力。

SMILET
TA貢獻1796條經驗 獲得超4個贊
問題可能是您正在將對象添加到數據庫上下文中,這將其標記為已添加。因為數據庫上下文不知道其存在Language
和Theme
對象,所以它嘗試插入所有對象。
這可能是 postgreSQL 提供程序的問題。您可能想檢查未解決的問題。
我建議首先嘗試Language
從數據庫加載對象,然后嘗試添加新的UserSettings
.
- 2 回答
- 0 關注
- 138 瀏覽
添加回答
舉報
0/150
提交
取消