阻止EF Core构建具有前缀名称IdentityDbContext的表

时间:2018-03-20 18:13:19

标签: asp.net entity-framework entity-framework-core

我有我的DBContext扩展IdentityDbContext但是,当查看抽象类IdentityDbContext时,我看到DbSets喜欢' UserRoles'和' RoleClaims'等

问题是,当我构建数据库时,表格会出现在' ASPNetUserRoles'而不仅仅是“UserRoles”#。有谁知道如何避免这种情况?

1 个答案:

答案 0 :(得分:7)

正如您从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);
    }
}