我的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/

10-12 20:16