Asp.net

重命名 dbo.AspNetUsers 表

  • March 7, 2020

我正在嘗試重命名由 ASP.net Identity 2.0 生成的預設表名。我閱讀了關於 stackoverflow 的所有文章、問題和答案,但我仍然遇到同樣的錯誤。

我將這些表重命名為 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而不僅僅是使用者,儘管我做了上面的更改。現在徹底絕望了。

在此處輸入圖像描述

數據庫以及具有新表名的相同列:

在此處輸入圖像描述

和 SQL 數據庫項目:

在此處輸入圖像描述

您需要更新數據庫。Enable-Migrations並且Update-Database,在這裡詳細解釋。EF 程式碼優先方法的要點是編寫我們的模型類和配置,每次我們更改某些內容時,我們都會使用 EF 遷移來更新數據庫架構。

使用 asp.net-identity-entityframework 的數據庫優先方法在此處此處進行了解釋,不是那麼簡單

在 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);

引用自:https://stackoverflow.com/questions/28015771