You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止EF Core为IdentityDbContext生成带前缀的表名?

解决IdentityDbContext生成表名带AspNet前缀的问题

这个坑我之前踩过!默认情况下ASP.NET Identity框架会给所有内置实体的表名加上AspNet前缀,要改成你想要的UserRoles这类名称,只需要通过Fluent API覆盖默认配置就行,具体步骤如下:

方法一:重写OnModelCreating配置表名

在你的自定义DbContext里,重写OnModelCreating方法,先调用基类的配置(保证Identity的默认关系和约束生效),再逐个指定实体对应的表名:

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

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // 必须先调用base方法,保留Identity的核心配置
        base.OnModelCreating(modelBuilder);

        // 替换成你想要的表名
        modelBuilder.Entity<IdentityUser>().ToTable("Users");
        modelBuilder.Entity<IdentityRole>().ToTable("Roles");
        modelBuilder.Entity<IdentityUserRole<string>>().ToTable("UserRoles");
        modelBuilder.Entity<IdentityRoleClaim<string>>().ToTable("RoleClaims");
        modelBuilder.Entity<IdentityUserClaim<string>>().ToTable("UserClaims");
        modelBuilder.Entity<IdentityUserLogin<string>>().ToTable("UserLogins");
        modelBuilder.Entity<IdentityUserToken<string>>().ToTable("UserTokens");
    }
}

注意事项

  • 如果你自定义了Identity实体(比如继承IdentityUser的AppUser),把上面的IdentityUser换成你的自定义类即可。
  • 不要忘记调用base.OnModelCreating(modelBuilder),否则Identity的默认主键、外键等配置会丢失。

方法二:重新生成迁移并更新数据库

配置完表名后,需要重新生成迁移脚本,再同步到数据库:

如果你用Package Manager Console:

Add-Migration RenameIdentityTables
Update-Database

如果你用.NET CLI:

dotnet ef migrations add RenameIdentityTables
dotnet ef database update

执行完这些步骤,数据库里的表名就会变成你指定的UserRoles、RoleClaims等,而不是默认的AspNetUserRoles了。

内容的提问来源于stack exchange,提问作者A.Mills

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:07:40