【问题标题】:How can I change the table names used by asp.net identity 3 (vnext)?如何更改 asp.net identity 3 (vnext) 使用的表名?
【发布时间】:2016-04-04 01:07:24
【问题描述】:

在 asp.net identity 2 中用于更改身份表名称的方法在 asp.net identity 3 中不起作用。

【问题讨论】:

    标签: asp.net asp.net-identity asp.net-identity-3


    【解决方案1】:

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

    您不需要使用.ForSqlServerToTable(),只需.ToTable() 就可以在任何数据库中使用。

    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】:

      在 ApplicationDbContext 的 OnModelCreating 中修改构建器实体,使用 ForSqlServerToTable 扩展方法更改所需的表名称。

          public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
          {
              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>().ForSqlServerToTable("Users");
                  builder.Entity<IdentityUserRole<string>>().ForSqlServerToTable("UserRoles");
                  builder.Entity<IdentityUserLogin<string>>().ForSqlServerToTable("UserLogins");
                  builder.Entity<IdentityUserClaim<string>>().ForSqlServerToTable("UserClaims");
                  builder.Entity<IdentityRole>().ForSqlServerToTable("Roles");                        
              }
          }
      

      【讨论】:

      • 用普通的 ToTable 而不是 ForSqlServerToTable 为我工作。 (虽然我在 dotnet core 示例项目中使用了 asp.net core 身份,所以可能对你没有帮助)
      猜你喜欢
      • 2013-10-27
      • 1970-01-01
      • 2014-12-22
      • 2014-09-05
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      相关资源
      最近更新 更多