首页 > 解决方案 > asp.net core identity 来自 BaseApplicationUser 的多个用户

问题描述

我正在为我的用户管理系统使用 ASP.NET Core 2.2 Identity。我需要有几种类型的用户......例如,仓库用户和应用程序用户,我创建了一个从身份用户类继承的基类 =>IdentityUser<long>

public class BaseApplicationUser : IdentityUser<long>
{
    public string FirstName { set; get; }
    public string LastName { set; get; }
    ...
}

仓库用户和商店用户继承自BaseApplicationUser创建不同的用户。

public class ApplicationUser : BaseApplicationUser
{
}

我只想为所有这些人准备一张桌子=>AspNetUsers 添加OnModelCreating此代码:

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<ApplicationUser>();
    builder.Entity<WarehouseApplicationUser>();
}

并在 Context 中的 DbSets 中:

public DbSet<ApplicationRole> ApplicationRole { get; set; }
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
public DbSet<WarehouseApplicationRole> WarehouseApplicationRole { get; set; }
public DbSet<WarehouseApplicationUser> WarehouseApplicationUsers { get; set; }

我需要为用户创建单独的角色类,比如ApplicationRoleWarehouseApplicationUsers.

有什么问题?

  1. 如何在 asp.net core Identity 中创建不同的用户?( 最好的办法 )
  2. 另一个问题是,当我向 中添加一个字段时ApplicationUser,该字段已成功添加到 中AspNetUsers,但是当我向 中添加一个字段时WarehouseApplicationUsers,EF Core 添加了名为WarehouseApplicationUsersand的新表WarehouseApplicationRoleWarehouseApplicationUserRole然后向WarehouseApplicationUsers表中添加了一个字段……这是什么!

最后,如何继承和构建不同用户的层次结构?非常感谢

标签: c#asp.net-coreasp.net-core-identityef-core-2.0tph

解决方案


问题1: How to create different users in asp.net core Identity ?

ASP.NET Core 提供了一个内置方法:AddIdentityCore<TUser>.

你可以像这样使用它:services.AddIdentityCore<ApplicationUser>();

更多细节你可以看到这个线程

问题2:

这是一个示例,您可以与您的代码进行比较:

基础应用用户:

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

应用用户:

 public class ApplicationUser : BaseApplicationUser
{
    public string Year { get; set; }
}

仓库应用用户:

public class WarehouseApplicationUser : BaseApplicationUser
{
     public string Age { get; set; }
}

应用程序上下文:

public class ApplicationDbContext : IdentityDbContext<BaseApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
  
    public DbSet<ApplicationUser> ApplicationUsers { get; set; }
   
    public DbSet<WarehouseApplicationUser> WarehouseApplicationUsers { get; set; }
}

迁移结果: 在此处输入图像描述


推荐阅读