如何阻止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
相关产品推荐
相关产品推荐

