![](/img/trans.png)
[英]How do I resolve my Invalid object name 'dbo.AspNetUsers' error?
[英]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>();
}
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
和其他助手的引用都需要使用新的泛型类型参数进行更新:
@inject SignInManager<User> SignInManager
@inject UserManager<User> UserManager
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.