簡體   English   中英

架構和ASP.Net身份

[英]Architecture and ASP.Net Identity

我目前正在遵循以下GitHub,以獲取有關將用戶數據從ASP.Net Identity存儲到Mongo的指導: https : //github.com/g0t4/aspnet-identity-mongo 有了基本的概念證明,我就能夠成功存儲用戶數據。 我當前面臨的問題是我的應用程序需要兩種類型的用戶(這兩種類型的用戶都將存儲到同一Mongo集合中)。

為簡單起見,我們可以稱呼用戶A和B。A和B都被設置為模型並具有自己的屬性。 我最初的想法是將A和B都設置為ApplicationUser的派生類(請參見參考存儲庫中的IdentityModels.cs文件)。

在該應用程序中的注冊與該體系結構完美配合,並且JSON文檔已發布/存儲到我的MongoDB中。 問題是當我嘗試登錄時。 發布后,出現服務器錯誤:

元素與Models.ApplicationUser類的任何字段或屬性都不匹配

當我將模型A的所有元素都放入ApplicationUser時,錯誤消失了。 但是,這使得模型B的問題沒有得到解決。 因此,我想問一問我采取的最佳途徑是什么? 我想到的一些想法涉及創建兩個唯一的UserManager,使用一個包含所有元素的大型JSON文檔(似乎有點雜亂無章),或者使用一個UserManager和兩個模型的適配器?

設置的方式很好,應該如此。 問題似乎出在Mongo如何處理繼承上,盡管對於SQL Server之類的東西您仍然會有另一個不同但同樣成問題的問題。

簡而言之,這里發生的事情實際上是您將UserA / UserBApplicationUser ,但是由於JSON包含那些派生類的屬性,而ApplicationUser沒有,所以Mongo對此感到窒息。 解決方案是使用多個UserManager 這是一個通用類型,需要一個TUser類型參數。 默認實現為UserManager<ApplicationUser> ,但假定所有內容均為ApplicationUser 如果已派生用戶類型,則需要為其使用特定於類型的UserManager<TUser>實例,即UserManager<UserA>UserManager<UserB>

FWIW,您在另一個數據存儲區上遇到的問題是,保存的類型決定了添加的Discriminator列的值,以使用查詢實例化正確的類型。 例如,即使您正在創建UserA ,如果您使用UserManager<ApplicationUser>的實例,它也會被上載到ApplicationUser另存ApplicationUser ,而不是UserA 這類似於您在Mongo設置中發生的事情,但是類似SQL Server的東西會很樂意接受(盡管您的數據隨后會被弄亂),而Mongo卻在出錯。

總而言之,請始終使用特定於您正在使用的用戶類型的UserManager<TUser>實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM