如何从 Asp.Net 标识表中删除鉴别器列

How to delete descriminator column from Asp.Net Identity tables

我重命名了标准身份表:

    public class User : IdentityUser
    {
        //...
        public string Name { get; set; }
        public string Surname { get; set; }
        public DateTime? RegisteredDate { get; set; }
        public DateTime? LastLoginDate { get; set; }
        //...
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<IdentityUser>().ToTable("Users");
        modelBuilder.Entity<User>().ToTable("Users");
        modelBuilder.Entity<IdentityRole>().ToTable("Roles");
        modelBuilder.Entity<Role>().ToTable("Roles");
        modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims");
    }

得到这个:

我需要在 modelBuilder 中做什么才能删除此列?

Discriminator 列在 Table-Per-Hierarchy 继承方案中被使用和需要。

Code First 必须添加一个特殊的列来区分持久性 classes。这不是我们对象模型中持久性 class 的 属性;它由 EF Code First 内部使用。默认情况下,列名称为 Discriminator,其类型为字符串。这些值默认为持久的 class 名称——在本例中为 User.
More info

更新

如果您不想要该列,您可以使 User 成为模型的一部分而不是 IdentityUser,例如通过在您的上下文中添加 DbSet<User>

modelBuilder.Entity<User>().ToTable("Users");