2017-01-03 110 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以查看您的迁移是否成功使用新表名或不? –

相关问题