如何获取当前登录的 ApplicationUser (EF6) 的完整对象

How can I get the full object of currently logged ApplicationUser (EF6)

我为此搜索了一个解决方案,但我找到的那个似乎不起作用或太旧了。

我有一个包含列表的用户对象,但是当我尝试使用 UserManager 获取它以添加内容时

var userAux = UserManager.FindById(User.Identity.GetUserId());

它 returns 我是空列表中的属性。

我还假设 db.Savechanges () 也不起作用,所以如果有人知道如何进行修改,请告诉我如何进行,我将不胜感激。

了解如何操作。我错过了一个 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);

你可以在任何地方注入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
}