亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從已登錄的用戶添加新用戶?

如何從已登錄的用戶添加新用戶?

C#
料青山看我應如是 2023-09-24 10:37:06
當我從頭開始創建新用戶(注冊)并從不依賴于底層數據庫的登錄用戶創建新用戶時,我有這種奇怪的行為(在本例中我使用的是 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給你沒有跟蹤的用戶!

感謝所有參與其中的人的努力。


查看完整回答
反對 回復 2023-09-24
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

問題可能是您正在將對象添加到數據庫上下文中,這將其標記為已添加。因為數據庫上下文不知道其存在LanguageTheme對象,所以它嘗試插入所有對象。

這可能是 postgreSQL 提供程序的問題。您可能想檢查未解決的問題。

我建議首先嘗試Language從數據庫加載對象,然后嘗試添加新的UserSettings.


查看完整回答
反對 回復 2023-09-24
  • 2 回答
  • 0 關注
  • 138 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號