我的DBContext扩展了IdentityDbContext,但是,当查看抽象类IdentityDbContext时,我看到诸如'UserRoles'和'RoleClaims'等的DbSet。
问题是,当我构建数据库时,表以“ ASPNetUserRoles”的形式出现,而不仅仅是“ UserRoles”。有谁知道如何避免这种情况?
最佳答案
从source code中可以看到,这些内容已在基本的IdentityDbContext
流利配置中进行了硬编码。
您可以做的是重写OnModelCreating
(如果尚未覆盖),调用基本实现,然后遍历模型实体类型,并从表名中删除前缀。
像这样:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
const string TableNamePrefix = "AspNet";
var tableName = entityType.Relational().TableName;
if (tableName.StartsWith(TableNamePrefix))
entityType.Relational().TableName = tableName.Substring(TableNamePrefix.Length);
}
}
更新(EF Core 3.0+):使用
entityType.GetTableName()
和entityType.SetTableName(...)
扩展方法。关于asp.net - 阻止EF Core建立带有前缀名称IdentityDbContext的表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49391437/