C# 如何读取dbo.AspNetUsers表?

C# 如何读取dbo.AspNetUsers表?,c#,entity-framework-core,asp.net-core-mvc,asp.net-core-identity,C#,Entity Framework Core,Asp.net Core Mvc,Asp.net Core Identity,我想从Identity表dbo.AspNetUsers中检索数据,但我还没有弄清楚如何查询它 这是我的数据库上下文: public class ProjectsDbContext : IdentityDbContext<IdentityUser> { public ProjectsDbContext(DbContextOptions<ProjectsDbContext> options) : base(options) { } public DbSet&

我想从Identity表
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);
    }
}
这是我的查询,但不起作用:

List<User> projectOwners = await db.Users.ToListAsync();
List projectOwners=wait db.Users.toListSync();
我收到的错误消息是:

无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List”

如果在查询中用
var
替换
List
,错误会消失,但我得到的集合不包含我自己的
用户
-class中的任何属性


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

如果您或多或少根据标准样板文件设置项目,我相信您可以像这样强制转换身份用户的覆盖类型:

Startup.cs
public void配置服务(IServiceCollection服务)
{
//到目前为止,相当标准的初始化
services.AddDbContext(选项=>
options.UseSqlServer(
GetConnectionString(“DefaultConnection”);
services.AddDefaultIdentity(options=>options.SignIn.RequireConfirmedAccount=false)//这是键-将自定义用户标识放在这里
.AddEntityFrameworkStores();
}
ProjectsDbContext.cs
公共类用户:IdentityUser
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
公共类项目dbcontext:IdentityDbContext//这是您的自定义用户类型
{
公共项目DBContext(DbContextOptions选项)
:基本(选项)
{
}
}
然后,由于要更改数据模型,因此需要迁移架构:

PM>添加迁移更改标识用户
PM>更新数据库
您会注意到迁移会将自定义字段添加到表中:

公共部分类更改\u标识用户:迁移
{
受保护的覆盖作废(MigrationBuilder MigrationBuilder)
{
migrationBuilder.AddColumn(
姓名:“名字”,
表:“AspNetUsers”,
可为空:真);
migrationBuilder.AddColumn(
姓名:“姓氏”,
表:“AspNetUsers”,
可为空:真);
} 
.......
最后,所有对
SignInManager
/
UserManager
和其他帮助程序的引用都需要使用新的泛型类型参数进行更新:

_LoginPartial.cshtml
@inject-SignInManager-SignInManager
@注入用户管理器用户管理器

使用EF Core With,表AspNetUsers映射到Users DbSet,以便您可以通过

db.Users

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

这会导致运行时异常“无法转换类型的对象…”好的。我想你的数据库上下文应该是
ProjectsDbContext:IdentityDbContext
-我会更新答案,这不是意味着我必须更改所有的标识视图吗?它们都引用
IdentityUser
。我更改了上下文,现在我得到了“无法为'IdentityUser'创建数据库集,因为此类型未包含在上下文的模型中。”当我尝试在应用程序中注册新用户时。很抱歉,似乎还有一些工作要做-请参阅更新的答案,并告诉我这是否有帮助
@inject SignInManager<User> SignInManager
@inject UserManager<User> UserManager
db.Users