ASP.net 身份自定义用户模型未被角色、声明和登录使用 table

ASP.net Identity custom user model not being used by roles, claims and login table

我正在使用这样的自定义用户模型:

 public class ApplicationUser : IdentityUser
 {
    public string Firstname { get; set; }
    ...
 }

身份系统创建的其余表有点不同步。创建了一个名为 ApplicationUser_Id 的新列,该列设置在外键处,但仍有一个 UserId 用作复合主键。

ApplicationUser 模型的配置是

public class ApplicationUserConfiguration : EntityTypeConfiguration<ApplicationUser>
{
    public ApplicationUserConfiguration()
    {
        this.ToTable("AspNetUsers");
        this.Property(u => u.Firstname).IsRequired().HasMaxLength(100);
        this.Property(u => u.Lastname).IsRequired().HasMaxLength(100);
    }
}

如何告诉 EF 继续使用 UserId 作为外键并删除 ApplicationUser_Id?

谢谢

更新: 按预期工作,直到我为 ApplicationUser 添加自定义配置。

DataContext.cs

modelBuilder.Configurations.Add(new ApplicationUserConfiguration());

ApplicationUserConfiguration.cs

public class ApplicationUserConfiguration : EntityTypeConfiguration<ApplicationUser>
{
    public ApplicationUserConfiguration()
    {
        this.ToTable("AspNetUsers");
        this.Property(u => u.Firstname).IsRequired().HasMaxLength(100);
        this.Property(u => u.Lastname).IsRequired().HasMaxLength(100);
    }
}

您正在覆盖约定,因此您需要手动映射您的 table。 像这样:

modelBuilder.Entity<AspNetUserClaims>() 
    .HasRequired(t => t.UserId) 
    .WithOptional(t => t.Claims);

我确实重现了这个问题,然后我通过添加 modelBuilder.Configurations.Add(new ApplicationUserConfiguration()); 修复了它 前 base.OnModelCreating(模型构建器); 所以函数现在

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ApplicationUserConfiguration());
        base.OnModelCreating(modelBuilder);

    }