首页 > 解决方案 > 自定义 Asp.Net Core ApiAuthorizationDbContext 表名

问题描述

我正在使用 Asp.Net Core 身份,我想更改由默认 ApiAuthorizationDbContext 生成的表名称。为了争论,假设我想更改AspNetRoleClaimsMyRoleClaims.

我的 DbContext 看起来像这样:

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

    }

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

我知道,如果我直接从那里继承,IdentityDbContext我可以指定某些实体,但我看不到使用ApiAuthorizationDbContext. 似乎两者之间的唯一区别是下表:

public DbSet<PersistedGrant> PersistedGrants { get; set; }
public DbSet<DeviceFlowCodes> DeviceFlowCodes { get; set; }

所以,我想我可以基于创建我的 DbContextIdentityDbContext并手动添加这些,但这感觉就像我在重新发明轮子。有没有办法指定这些表名,还是我真的需要手动构建它IdentityDbContext

标签: c#asp.net-coreasp.net-core-identity

解决方案


在您的 ApiAuthorizationDbContext 中覆盖 OnModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder); 

        modelBuilder.Entity<ApplicationUser>().ToTable("User");
        modelBuilder.Entity<IdentityRole>().ToTable("Role");
        modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin");
    }


推荐阅读