好吧,所以我定製了ApplicationUser,我需要在用戶登錄時加載集合,而我只是試圖找到最好的方法來做到這一點。我查看了網絡上的示例,但這些示例僅通過添加自定義屬性(而非集合)來自定義ApplicationUser。當用戶登錄時,我需要加載一個IList <>。我看到了幾種方法來做到這一點,我想知道哪種方法會被認爲是「最好」的方式(我知道這有點主觀,但我認爲這是一個新的理由)。用戶在登錄時加載集合
不管怎樣,在對AcccountController的登錄方法,我們有這樣的:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
我可以在await SigninAsync()
後添加一行來加載我的收藏,但似乎浪費,爲的UserManager已經去了數據庫。我真正想要的是通過某種方式告訴用戶管理器,當它爲用戶查詢數據庫時,我的收藏集爲.Include()
。我正在看從UserStore<ApplicationUser>
繼承並重寫FindByNameAsync()
功能由UserManager
叫:
public virtual Task<TUser> FindByNameAsync(string userName)
{
this.ThrowIfDisposed();
IQueryable<TUser> entitySet =
from u in this._userStore.EntitySet
where u.UserName.ToUpper() == userName.ToUpper()
select u;
return Task.FromResult<TUser>(entitySet.FirstOrDefault<TUser>());
}
,並覆蓋它,我使用並加載了我的屬性定製ApplicationUser。這是應該完成的方式,還是我忽略了一些可以更簡單地處理這個事情的地方AspNet.Identity
?
所以,在我的臉上迅速炸燬了,又好像你不會從UserStore<TUser>
繼承並訪問任何,你可能真的想重寫這些方法中的一個時使用,如全部是internal
或private
。這麼短的複製和粘貼所有的UserStore<TUser>
和重新工作我想要的一種方法是否有任何建議?