【问题标题】:.NET querying Aspnetusers instead of Custom AuthUser and Yet AspNetUser does not Exist.NET 查询 Aspnetusers 而不是自定义 AuthUser,但 AspNetUser 不存在
【发布时间】:2025-12-18 11:40:01
【问题描述】:

我编写了一个自定义 IdentityUser,即 AuthUser。

public class AuthUser : IdentityUser
    {
        public int StudentsId { get; set; }
        public virtual Students StudentProfile { get; set; }

        public int InstructorId { get; set; }
        public virtual Instructor InstructorProfile { get; set; }

        public bool IsStudent { get; set; }
        public bool IsInstructor { get; set; }
    }

如您所见,上下文还可以

 public class LmsContext : IdentityDbContext<AuthUser> //DbContext
    {
}

startup.cs 全部设置完毕

services.AddDbContext<LmsContext>(options =>
                options.UseSqlServer(
                Configuration.GetConnectionString("UCIPrimarySchool"))
                );
            services.AddDefaultIdentity<AuthUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<LmsContext>();

            services.AddControllersWithViews();
            services.AddRazorPages();

但是当我尝试登录时,出现以下错误。

An unhandled exception occurred while processing the request.
SqlException: Invalid object name 'AspNetUsers'.

Microsoft.Data.SqlClient.SqlCommand+<>c.<ExecuteDbDataReaderAsync>b__169_0(Task<SqlDataReader> result)

为什么不查询扩展的 AuthUser 而是查询不存在的表 AspNetUsers?

【问题讨论】:

  • 您是否创建了迁移并更新了数据库?
  • 你的AuthUserStudent and Instructor是什么关系?你能分享你的StudentInstructor 课程吗?
  • 是的,我将数据库、学生和教师更新为这两个候选人各自独有的个人资料
  • 嗨@wangolo joel,你能和我们分享一下Student and Instructor 模型吗?
  • 它们之间的关系是一一对应的吗?

标签: asp.net asp.net-core dot


【解决方案1】:

首先,您应该澄清您的关系,然后正确迁移和更新数据库。

像这样更改您的 AuthUser:

public class AuthUser : IdentityUser
{
    public virtual Students StudentProfile { get; set; }

    public virtual Instructor InstructorProfile { get; set; }

    public bool IsStudent { get; set; }
    public bool IsInstructor { get; set; }
}

在你的Context:

  public DbSet<Students>  Students { get; set; }
  public DbSet<Instructor> Instructor { get; set; }

迁移和更新:

成功更新数据库后,您需要更改您的View/Shared/_LoginPartial代码:

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

@inject SignInManager<AuthUser> SignInManager
@inject UserManager<AuthUser> UserManager

然后

Select your LmsContext 添加

然后启动您的应用程序并登录。

【讨论】:

  • 有趣的细节谢谢,我得到了关键部分的工作。