繁体   English   中英

如何从 dbo.AspNetUsers 表中读取数据?

[英]How do I read from the dbo.AspNetUsers table?

我想从 Identity-table dbo.AspNetUsers检索数据,但我还没有弄清楚如何查询它。

这是我的数据库上下文:

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

    public DbSet<Project> Projects { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        if (modelBuilder == null)
        {
            throw new NullReferenceException();
        }

        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Project>()
            .HasMany(c => c.ChildProjects)
            .WithOne(p => p.ParentProject)
            .HasForeignKey(p => p.ParentProjectId);
    }
}

这是我的User类:

public class User : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

这是我的查询,它不起作用:

List<User> projectOwners = await db.Users.ToListAsync();

我得到的错误信息是:

无法将类型“System.Collections.Generic.List<Microsoft.AspNetCore.Identity.IdentityUser>”隐式转换为“System.Collections.Generic.List<Projects.Models.User>”

如果我在查询中用var替换List<User> ,错误就会消失,但我得到的集合不包含我自己的User类的任何属性。

如何访问AspNetUsers ,包括我自己在User定义的额外属性?

使用 EF Core,表 AspNetUsers 映射到 Users DbSet,因此您可以通过以下方式轻松引用它

db.Users

如果您自定义 AspNetTable,添加您自己的字段,例如 FirstName、LastName,那么您需要根据 @timur 的答案从IdentityUser派生,但您仍然应该能够仅使用db.Users来引用该表

假设您正在根据标准样板或多或少地设置您的项目,我相信您可以像这样转换您的身份用户的覆盖类型:

启动文件

 public void ConfigureServices(IServiceCollection services)
        {
            // pretty standard initialisation so far
            services.AddDbContext<ProjectsDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));
            services.AddDefaultIdentity<User>(options => options.SignIn.RequireConfirmedAccount = false) // this is the key - put your custom User Identity here
                .AddEntityFrameworkStores<ProjectsDbContext>();
        }

项目DbContext.cs

public class User : IdentityUser
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    public class ProjectsDbContext: IdentityDbContext<User> // this is your custom User type
    {
        public ProjectsDbContext(DbContextOptions<ProjectsDbContext> options)
            : base(options)
        {
        }
    }

然后,由于您正在更改数据模型,您将需要迁移架构:

PM> Add-Migration change_IdentityUser
PM> Update-Database

您会注意到迁移将您的自定义字段添加到表中:

public partial class change_IdentityUser : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn<string>(
                name: "FirstName",
                table: "AspNetUsers",
                nullable: true);

            migrationBuilder.AddColumn<string>(
                name: "LastName",
                table: "AspNetUsers",
                nullable: true);
        } 
.......

最后,所有对SignInManager / UserManager和其他助手的引用都需要使用新的泛型类型参数进行更新:

_LoginPartial.cshtml

@inject SignInManager<User> SignInManager
@inject UserManager<User> UserManager

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM