【问题标题】:Stop EF Core from building tables with prefixed names IdentityDbContext阻止 EF Core 构建带有前缀名称的表 IdentityDbContext
【发布时间】:2018-03-20 18:13:19
【问题描述】:

我的 DBContext 扩展了 IdentityDbContext,但是,在查看抽象类 IdentityDbContext 时,我看到了像“UserRoles”和“RoleClaims”等 DbSet。

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

【问题讨论】:

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


    【解决方案1】:

    正如您从 source code 中看到的那样,这些都硬编码在基本的 IdentityDbContext fluent 配置中。

    您可以做的是覆盖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(...)扩展方法。

    【讨论】:

    • 非常感谢,这正是我想要的。您是否看到这样做可能导致的任何问题?
    • 没有。这是为实体指定不同表名的标准方式,与身份表没有任何共同之处 - 从 EF 的角度来看,它们与其他实体一样。我们只是更改默认表名。我猜他们选择默认前缀只是为了在查看数据库时轻松地将它们与您的表区分开来。
    猜你喜欢
    • 2019-05-02
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多