![](/img/trans.png)
[英]ASP.NET Core Identity does not inject UserManager<ApplicationUser>
[英].NET Core Identity using userManager and load additional ApplicationUser properties
我的問題基於此處的主題,但是由於不允許在此處添加評論,我想我必須打開一個新線程。
在我的ASP.NET Core后端中,我正在使用ASP.NET Core身份進行用戶管理。 它在所謂的用戶管理器的幫助下提供了用於用戶身份驗證的方法。
現在,我一方面無法使用用戶管理器中的方法,另一方面卻無法加載自定義的Application User屬性。
方案如下:前端通過MVC控制器(HTTP請求)發送包含電子郵件地址和密碼的登錄dto。 現在,我想使用用戶管理器提供的FindByEmailAsync
方法加載應用程序用戶。 我將此方法包裝在一個自制的應用程序用戶存儲庫中,在該存儲庫中,用戶管理器是通過依賴項注入來注入的,並且還可以訪問應用程序上下文。 由於用戶管理器在加載用戶管理器時不會加載自定義屬性,因此我也必須做一些額外的工作來加載這些屬性。
我首先嘗試通過上下文(而不是通過用戶管理器)完全加載用戶。 效果很好,其他屬性也可以加載。 隨后嘗試使用usermanager.CheckPasswordAsync
方法時,問題開始。 我有一個例外:
“無法跟蹤實體ApplicationUser的實例,因為已經跟蹤了另一個具有相同鍵值的id的實例”。
我認為這是由於一方面使用上下文加載用戶,而另一方面使用用戶管理器執行checkPassword
。 然后,我嘗試使用FindByEmailAsync
的usermanager
加載用戶。 一切正常,沒有異常,但是自定義屬性尚未加載。 在我上面鏈接的線程中,有一些建議,但是沒有一個對我有用。
建議:
var user = await userManager.Users .Include(x => x.Address) .SingleAsync(x => x.NormalizedEmail == email);
userManager.Users
是IQueryable<Users>
,並且不包含Include方法。
建議:
await context.Entry(user).Reference(x => x.Address).LoadAsync();
在我的情況下,自定義屬性(Certificates)是一個集合,因此我使用.Collection
而不是.Reference
,但是出現以下錯誤:
“無法加載類型為'ApplicationUser'的實體上的導航屬性'Certificates',因為該實體未被跟蹤。只能為跟蹤的實體加載導航屬性。“
有人建議如何使用用戶管理器提供的方法,並向應用程序用戶包括自定義屬性嗎?
謝謝!
我遇到了同樣的問題,並注意到當您訪問自定義屬性之前加載DbContext時,它可以工作
var user = await userManager.Users;
_context.Users.Include(u => u.Address).FirstOrDefault(x => x.NormalizedEmail == email);
var adress = user.Address;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.