2017-01-03 63 views
9

我已經開始與.NET的核心,在MVC 5我改變例如默認的表名:以這種方式AspNETUsers給用戶它完美地工作: 在IdentityModels I類dded:如何更改.NET CORE中的默認ASP.NET標識表名稱?

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

     modelBuilder.Entity<IdentityUser>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId"); 
     modelBuilder.Entity<ApplicationUser>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId"); 
     modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles"); 
     modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins"); 
     modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims"); 
     modelBuilder.Entity<IdentityRole>().ToTable("Roles"); 
    } 

但它在.NET CORE(MVC 6)中不起作用。 任何人都可以幫助我嗎? 非常感謝。

+1

請不要使用:網絡核心的代名詞ASP.NET核心! .NET Core是一個運行時,與.NET 4.x運行時一樣。另一方面,ASP.NET核心是一個框架/ webstack,並運行於** BOTH **,.NET核心和.NET> = 4.5.1 – Tseng

+0

@Tseng,我正在學習Core,肯定哪裏有很多差異ASP.NET和Core。 –

回答

7

嘗試改變結合

builder.Entity<ApplicationUser>(entity => 
     { 
      entity.ToTable(name:"Users"); 
      entity.Property(e => e.Id).HasColumnName("UserId"); 

     }); 
5

- 要改變這些表(IdentityUserRole <Tkey>,IdentityUserToken <Tkey>,IdentityRoleClaim <Tkey>,IdentityUserClaim <Tkey>,IdentityUserLogin <Tkey>)的名字,你必須指定TKEY的類型(的用於主鍵的類型),即使沒有更改,也是默認字符串(GUID)。

- 如果你想改變GUID主鍵爲int https://medium.com/@goodealsnow/asp-net-core-identity-3-0-6018fc151b4

protected override void OnModelCreating(ModelBuilder builder) 
    { 
     base.OnModelCreating(builder); 
     // Customize the ASP.NET Identity model and override the defaults if needed. 
     // For example, you can rename the ASP.NET Identity table names and more. 
     // Add your customizations after calling base.OnModelCreating(builder); 

     builder.Entity<ApplicationUser>(entity => 
     { 
      entity.ToTable(name: "User");   
     }); 

     builder.Entity<IdentityRole>(entity => 
     { 
      entity.ToTable(name: "Role"); 
     }); 
     builder.Entity<IdentityUserRole<string>>(entity => 
     { 
      entity.ToTable("UserRoles"); 
      //in case you chagned the TKey type 
      // entity.HasKey(key => new { key.UserId, key.RoleId }); 
     }); 

     builder.Entity<IdentityUserClaim<string>>(entity => 
     { 
      entity.ToTable("UserClaims"); 
     }); 

     builder.Entity<IdentityUserLogin<string>>(entity => 
     { 
      entity.ToTable("UserLogins"); 
      //in case you chagned the TKey type 
      // entity.HasKey(key => new { key.ProviderKey, key.LoginProvider });  
}); 

     builder.Entity<IdentityRoleClaim<string>>(entity => 
     { 
      entity.ToTable("RoleClaims"); 

     }); 

     builder.Entity<IdentityUserToken<string>>(entity => 
     { 
      entity.ToTable("UserTokens"); 
      //in case you chagned the TKey type 
      // entity.HasKey(key => new { key.UserId, key.LoginProvider, key.Name }); 

     }); 
    } 
+0

僅限代碼解答。你能用幾句話解釋這個問題解決了多遠?! – ImportanceOfBeingErnest

+0

我將上面的代碼添加到我的asp.net核心2.0 mvc應用程序中。清理並重建項目並刪除Migrations文件夾,然後在nuget控制檯中運行update-database,並使用最初的AspNet *名稱創建標識表。 – alexb

+0

嗨,Alexb,我創建了新的.NET Core 2.0,並使用相同的代碼來更改默認的ASP.NET身份表名稱,並且它與我一起工作良好。 您是否檢查ApplicationDbContextModelSnapshot以查看您的遷移是否成功使用新表名或不? –

相關問題