【问题标题】:How to change table names in Asp.net Identity 3.0?如何在 Asp.net Identity 3.0 中更改表名?
【发布时间】:2016-04-13 06:09:53
【问题描述】:

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

我已经搜索过,但没有找到任何适用于 Identity 3.0 的文章

这个How can I change the table names used by asp.net identity 3 (vnext)? 不起作用。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-identity


    【解决方案1】:

    您可以通过在DbContextOnModelCreating 上使用扩展方法ToTable("TableName") 更改实体映射来轻松做到这一点:

    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 上的默认值。

    【讨论】:

      【解决方案2】:

      仅出于文档目的,对于那些在未来几年来这篇文章的人(比如我 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

      【讨论】:

        猜你喜欢
        • 2016-08-19
        • 2013-10-27
        • 2016-10-22
        • 2016-04-04
        • 2014-09-05
        • 1970-01-01
        • 2014-12-22
        • 2016-04-25
        • 1970-01-01
        相关资源
        最近更新 更多