如何为ASP.NET Core 2.1中从IdentityUser继承的类重命名AspNetUsers表?

时间:2018-07-21 11:18:43

标签: c# ef-migrations asp.net-core-identity asp.net-core-2.1 ef-core-2.1

我正在将ASP.NET Core 2.1用于带有PersonalAuthentication的项目。我的User表需要其他属性,因此我是从IdentityUser继承的,如下所示:

 public class ApplicationUser : IdentityUser
{
    [Required]
    [DataType(DataType.Text)]
    public string Name { get; set; }

    [Required]
    [DataType(DataType.Text)]
    public string LastName { get; set; }
}

此修改后,AspNetUsers表未重命名。所有其他身份表都被重命名。我不知道为什么会这样。

在创建ApplicationUser类之后,我在代码IdentityUser中将ApplicationUser替换为Startup.cs

下面是修改之前的代码

services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<IdentityUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>();

修改后

services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<ApplicationUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>();

这是我的OnModelCreating方法

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

        modelBuilder.Entity<ApplicationUser>().ToTable("User");
        //modelBuilder.Entity<IdentityUser>().ToTable("User");
        modelBuilder.Entity<IdentityRole>().ToTable("Role");
        modelBuilder.Entity<IdentityUserClaim<string>().ToTable("UserClaim");
        modelBuilder.Entity<IdentityUserRole<string>>().ToTable("UserRole");
        modelBuilder.Entity<IdentityUserLogin<string>().ToTable("UserLogin");
        modelBuilder.Entity<IdentityRoleClaim<string>().ToTable("RoleClaim");
        modelBuilder.Entity<IdentityUserToken<string>().ToTable("UserToken");
    }

现在,我不知道重命名AspNetUsers表还缺少什么。我没有找到任何解决方案,仍在搜索。

1 个答案:

答案 0 :(得分:2)

流利的配置还可以,但是用作您的上下文基础的标识类不是。

Customizing the model 中所述(重点是我的):

  

自定义模型的出发点是源自适当的上下文类型;请参阅上一节。

和前面的部分介绍了基类,泛型类型参数和默认配置。

话虽如此,由于您仅使用自定义的IdentityUser派生类,因此基数至少应为IdentityDbContext<TUser>

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    // ...
}