首页 > 解决方案 > ApiAuthorizationDbContext 的自定义角色类

问题描述

在过去的 2 天里,我一直在尝试让 ApiAuthorizationDbContext 设置自定义 IdentityRole。使用 IdentityDbContext 可以按如下方式完成:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

在 blazor 项目模板中,ApplicationDbContext 的声明如下:

public class ApplicationDbContext : ApiAuthorizationDbContext<ApplicationUser>
{
    public ApplicationDbContext(
        DbContextOptions options,
        IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions)
    {
    }
}

如何使用 ApiAuthorizationDbContext 做类似的事情。我无法从 ApiAuthorizationDbContext 类中找到这种支持。

谢谢。

标签: asp.net-coreentity-framework-coreidentityserver4asp.net-core-3.1blazor-webassembly

解决方案


我没有找到一种方法来拥有我的自定义角色类,但我找到了一种方法来解决我的问题并将属性添加到现有的 IdentityRole 类中,并且会回答我的问题,以防其他人需要做类似的事情。这个问题的解决方案是阴影属性。

例如,如果我想为 IdentityRole 类创建一个 DateTime 属性,我们可以在 DBContext 类中使用以下代码。

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<IdentityRole>().Property<DateTime>("LastUpdated");
    base.OnModelCreating(builder);
}

现在我们可以像这样访问该属性:

context.Entry(myRole).Property("LastUpdated").CurrentValue = DateTime.Now;

它不像拥有自定义类那么容易,但至少它让我有机会拥有 IdentityRole 类的自定义属性。


推荐阅读