重命名 dbo.AspNetUsers table

Renaming dbo.AspNetUsers table

我正在尝试重命名由 ASP.net Identity 2.0 生成的默认 table 名称。我阅读了所有关于 Whosebug 的文章、问题和答案,但我仍然遇到同样的错误。

我将 table 重命名为 Roles、UserClaims、Logins、UserRoles 和 Users。我还将应用程序dbcontext更改为以下内容

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder) {
        base.OnModelCreating(modelBuilder);


        modelBuilder.Entity<IdentityUser>().ToTable("Users", "dbo");
        modelBuilder.Entity<IdentityRole>().ToTable("Roles", "dbo");
        modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles", "dbo");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims", "dbo");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins", "dbo");

    }

}

但我一直收到 Invalid object name 'dbo.AspNetUsers'. 错误,我不知道为什么它仍然首先尝试定位 AspNetUsers 而不是 Users 虽然我做了上面的更改。现在完全绝望了。

数据库也是如此,具有新 table 名称的相同列:

以及 SQL 数据库项目:

您需要更新数据库。 Enable-MigrationsUpdate-Database,详细解释 here。 EF 代码优先方法的要点是编写我们的模型 类 和配置,每次我们更改某些内容时,我们都会使用 EF 迁移来更新数据库架构。

使用 asp.net-identity-entityframework 的数据库优先方法得到了解释 here and here,不是那么简单

在IdentityModels.cs

中写入如下代码
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DBConnectionString", throwIfV1Schema: false)
    {
    }

    protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims");
        modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins");
        modelBuilder.Entity<IdentityRole>().ToTable("Roles");
        modelBuilder.Entity<ApplicationUser>().ToTable("Users");
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

在Global.asax.cs文件中的Application_Start()方法中写入如下代码

Database.SetInitializer<ApplicationDbContext>(null);