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

A.M*_*lls 2 asp.net entity-framework entity-framework-core

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

问题是,当我构建数据库时,表格显示为'ASPNetUserRoles',而不仅仅是'UserRoles'.有谁知道如何避免这种情况?

Iva*_*oev 8

源代码中可以看出,这些是基本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);
    }
}
Run Code Online (Sandbox Code Playgroud)