【问题标题】:How can I get the full object of currently logged ApplicationUser (EF6)如何获取当前记录的 ApplicationUser (EF6) 的完整对象
【发布时间】:2020-11-22 01:15:51
【问题描述】:
我为此搜索了一个解决方案,但我发现的那个似乎不起作用或很旧。
我有一个包含列表的用户对象,但是当我尝试使用 UserManager 获取它以添加内容时
var userAux = UserManager.FindById(User.Identity.GetUserId());
它会返回 null 列表中的属性。
我还假设 db.Savechanges () 也不起作用,所以如果有人知道如何进行修改,如果你告诉我如何进行,我将不胜感激。
【问题讨论】:
标签:
c#
asp.net-mvc
entity-framework
entity-framework-6
asp.net-identity
【解决方案1】:
了解如何操作。我错过了一个 using,而 VS 又给我抛出了另一个随机错误。
using System.Data.Entity; <<==Important
var userId = User.Identity.GetUserId();
var userAux = db.Users.Include(u => u.ListO).First(u => u.Id == userId);
【解决方案2】:
你可以在任何你想要的地方注入HttpContextAccessor,然后使用UserManager获取当前用户。
internal interface IAccountRepository
{
Task<User> GetCurrentUser();
}
internal class AccountRepository : IAccountRepository
{
private readonly MyDbContext my_context;
private readonly UserManager<Entities.User> user_manager;
private readonly HttpContextAccessor http_context;
public AccountRepository(UserManager<Entities.User> user_manager, MyDbContext my_context, HttpContextAccessor http_context)
{
this.user_manager = user_manager;
this.my_context = my_context;
this.http_context = http_context;
}
public async Task<User> GetCurrentUser()
{
var user = await user_manager.GetUserAsync(http_context.HttpContext.User);
return ToDto(user);
}
#region Conversion methods
internal static Entities.User ToEntity(User user)
{
if (user == null) return null;
return new Entities.User
{
Id = user.Id,
Email = user.Email,
UserName = user.UserName,
PictureUrl = user.PictureUrl
};
}
internal static User ToDto(Entities.User user)
{
if (user == null) return null;
return new User
{
Id = user.Id,
Email = user.Email,
UserName = user.UserName,
PictureUrl = user.PictureUrl
};
}
#endregion
}