繁体   English   中英

如何在 Asp.net Identity 3.0 中更改表名?

[英]How to change table names in Asp.net Identity 3.0?

如何更改 ASP.net Identity 3.0 中的表名?

我已经搜索过,但我没有得到任何关于 Identity 3.0 的可行的文章

以及这个如何更改asp.net identity 3 (vnext) 使用的表名? 不工作。

您可以通过在OnModelCreatingDbContext上使用扩展方法ToTable("TableName")更改实体映射来轻松完成此DbContext

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    builder.Entity<User>().ToTable("Users"); // Your custom IdentityUser class
    builder.Entity<IdentityUserLogin<string>>().ToTable("UserLogins");
    builder.Entity<IdentityUserToken<string>>().ToTable("UserTokens");
    builder.Entity<IdentityUserClaim<string>>().ToTable("UserClaims");
    builder.Entity<IdentityUserRole<string>>().ToTable("UserRoles");
    builder.Entity<IdentityRoleClaim<string>>().ToTable("RoleClaims");
    builder.Entity<IdentityRole>().ToTable("Roles");            
}

这里唯一的问题是记住使用具有标识符类型的泛型(字符串是 AspNetCore 上的默认值。

仅出于文档目的,对于那些在未来几年来此帖子的人(如我 XD),问题的答案:

如何更改 .NET CORE 中的默认 ASP.NET Identity 表名称?

可以这样解决

//Repeat with each table

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

   });

或者可以这样解决

    modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
    modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
    modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles");
    modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins");
    modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims");
    modelBuilder.Entity<IdentityRole>().ToTable("MyRoles");

但是你可以简单地使用 Alexandru Bucur 在他的博客上给出的这种方法,并在 netcore 2.2 上进行测试

     foreach (var entityType in modelBuilder.Model.GetEntityTypes())
     {
        var table = entityType.Relational().TableName;
         if (table.StartsWith("AspNet"))
         {
             entityType.Relational().TableName = table.Substring(6);
         }
     };

但这不再支持 netcore > 2.2,所以,我需要修复它,这是 NetCore > 2.2 上的功能方式

    foreach (var entityType in modelBuilder.Model.GetEntityTypes())
    {
        var tableName = entityType.GetTableName();
        if (tableName.StartsWith("AspNet"))
        {
            entityType.SetTableName(tableName.Substring(6));
        }
    }

选择你喜欢的并享受它,HappyCoding

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM