如何在Identity RoleClaims表(asp网络核心)中添加新列

时间:2019-09-04 16:19:57

标签: asp.net-core identity roles claims

我试图在身份(asp网络核心)RoleClaims表中添加一列,但是我发现内容只是为了扩展角色和用户类,而不是RoleClaims。 有人可以帮忙提供示例或指出内容吗?

2 个答案:

答案 0 :(得分:1)

您将需要创建一个新类来扩展RoleClaim。这是密钥类型为string时如何执行此操作的示例:

public class ApplicationRoleClaim : IdentityRoleClaim<string>
{
    public virtual ApplicationRole Role { get; set; }
}

您可以向此类添加所需的任何新属性,然后创建迁移以将它们添加为表列。

您还需要告诉您的IdentityDbContext也使用这个新类。这是文档中的示例:

public class ApplicationDbContext
    : IdentityDbContext<
        ApplicationUser, ApplicationRole, string,
        ApplicationUserClaim, ApplicationUserRole, ApplicationUserLogin,
        ApplicationRoleClaim, ApplicationUserToken>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

编辑:

使用您的自定义ApplicationRoleClaim类,您也可以覆盖OnModelCreating。这是来自文档的示例:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    ⋮
    modelBuilder.Entity<IdentityRoleClaim<string>>(b =>
    {
        b.ToTable("MyRoleClaims");
    });
    ⋮
}

参考:Identity model customization in ASP.NET Core

答案 1 :(得分:0)

我用asp.net core 2.2进行了演示,它运行良好,请尝试以下代码,自定义ApplicationRoleClaim以添加其他属性。

public class ApplicationRoleClaim: IdentityRoleClaim<string>
{
    public string Description { get; set; }
}

然后使用DbSet<TEntity>类代表模型中给定实体的集合,并且是针对实体进行数据库操作以将新列添加到表的网关

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {

    }

    public DbSet<ApplicationRoleClaim> ApplicationRoleClaim { get; set; }
}

最后添加迁移和更新数据库。