【问题标题】:ApplicationUser always null ASP.NET CORE 3.0 IdentityApplicationUser 始终为空 ASP.NET CORE 3.0 标识
【发布时间】:2020-04-21 21:57:00
【问题描述】:

当我尝试让我的用户从表 AspNetUsers 中获取时,即使表中有用户,用户也总是返回 null。

public class ApplicationUser : IdentityUser
{
    public int Rating { get; set; }
    public string ProfileImageUrl { get; set; }
    public DateTime MemberSince { get; set; }
    public bool IsActive { get; set; }
}

我要显示的是带有作者信息的帖子

public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public DateTime Created { get; set; }

    public virtual Foorum Forum { get; set; }
    public virtual IEnumerable<PostReply> PostReplies { get; set; }
    public virtual ApplicationUser User { get; set; }
}

这就是我获取帖子和用户的方式,用户在这里始终为空。

 public Foorum GetById(int id)
    {
        var forum = _forumDbContext.Forums.Where(f => f.Id == id)
            .Include(f => f.Posts)
            .ThenInclude(p => p.User)
            .Include(f => f.Posts)
            .ThenInclude(p => p.PostReplies)
            .ThenInclude(r => r.User)
            .FirstOrDefault();

        return forum;
    }

这就是我的 DbContext 的样子:

    public class ForumDbContext : IdentityDbContext<IdentityUser>
{
    public ForumDbContext(DbContextOptions<ForumDbContext> options)
        : base(options)
    {
    }

    public DbSet<Foorum> Forums { get; set; }
    public DbSet<Post> Posts { get; set; }
    public DbSet<PostReply> PostReplies { get; set; }
}

Startup.cs

        public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ForumDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));

        services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ForumDbContext>();
}

我还添加了 app.UseAuthentication(); app.UseAuthorization();在 Configure 方法中。

我在这里缺少什么,为什么我不能从数据库中获取用户?

【问题讨论】:

  • 这就是我获取帖子和用户的方式,而用户在这里始终为空:您能否检查数据库并确保具有该 ID 的论坛有一个帖子有用户该帖子相关联吗?
  • 如何映射帖子和用户之间的关系?
  • 我也有类似的问题。我看到您的代码有问题的一件事是您有行 services.AddDefaultIdentity(options ... 这应该是 services.AddDefaultIdentity(options ... 我没有将此作为解决方案发布,因为我没有'还没有
  • 投票结束时“需要详细信息或明确性”,因为上述 cmets 中要求的澄清是必不可少的。

标签: c# asp.net-core entity-framework-core asp.net-identity


【解决方案1】:

更新

Startup.csForumDbContext.cs 文件中将IdentityUser 更改为ApplicationUser,这可能会有所帮助。


正如我在post 中提到的,您应该添加一个属性UserId 并将其设置为所需的User Id,例如_currentUser.Id。实体框架会自动将User 包含到您的模型中。

【讨论】:

  • 错了。 UserId 不是导航属性,EF 核心永远不会自动包含User。此外,在 OP 回答 cmets 中向他们提出的一些问题之前,回答是无用的。
  • @GertArnold,问题很明确,问题出在Post 模型中。他应该将UserId 属性添加到Post 类中,并在创建新帖子时进行设置。
  • 如何清除?它甚至没有显示如何保存帖子,因此无法确定数据库记录是否具有正确的外键值。但无论清楚与否,你的答案都是错误的。
  • 他在Post 类中使用了ApplicationUser 类型。但在Startup.cs 中,他使用了IdentityUser
  • 看到了吗?只有模棱两可和晦涩难懂。
猜你喜欢
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多