【问题标题】:Always load entity for ApplicationUser (.NET MVC, Identity)始终为 ApplicationUser 加载实体(.NET MVC、Identity)
【发布时间】:2017-02-25 03:59:03
【问题描述】:

我在加载已分配给 .NET 核心 MVC 应用程序中的 ApplicationUser 的实体时遇到问题。

我已将我的一个实体添加到用户类,请参见下面的代码:

public class ApplicationUser : IdentityUser
{
   public int? AzureBlobResourceId { get; set; }

   [ForeignKey("AzureBlobResourceId")]
   public AzureBlobResource AzureBlobResource { get; set; }
}

理想情况下,我希望在从 UserManager 检索用户时加载 AzureBlobResource 对象

private Task<ApplicationUser> GetCurrentUserAsync()
{
   return _userManager.GetUserAsync(HttpContext.User);
}

不幸的是,尽管 AzureBlobResource 对象始终为空,即使 AzureBlobResourceId 具有值。

我在这里错过了什么?

谢谢,尼古拉

【问题讨论】:

  • 你能告诉我们 _userManager 的声明吗?

标签: asp.net-mvc asp.net-core asp.net-identity .net-core


【解决方案1】:

你需要实现你的用户存储

public class ApplicationUser : IdentityUser {
   public int? AzureBlobResourceId { get; set; }
   [ForeignKey("AzureBlobResourceId")]
   public AzureBlobResource AzureBlobResource { get; set; } 
}

 public class MyAppUserStore : UserStore<ApplicationUser>
{
    public MyAppUserStore(DbContext context, IdentityErrorDescriber describer = null) : base(context, describer)
    {
    }
    public override async Task<ApplicationUser> FindByIdAsync(string userId, CancellationToken cancellationToken = new CancellationToken())
    {
        return await Context.Set<ApplicationUser>().Include(p => p.AzureBlobResource).FirstOrDefaultAsync(u => u.Id == userId, cancellationToken: cancellationToken);
    }
}

并在 Sturtup.cs 中添加

ervices.AddIdentity<ApplicationUser, IdentityRole>()

                .AddUserStore<MyAppUserStore >()
                .AddUserManager<UserManager<ApplicationUser>>()
                .AddDefaultTokenProviders();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2014-03-10
    • 2015-06-19
    • 1970-01-01
    相关资源
    最近更新 更多