ASP.NET Core Identity 在 AspNetUserRoles 中添加了额外的外键

ASP.NET Core Identity Added extra foreign key in AspNetUserRoles

AspNetUserRoles 中有两个额外的外键(TheUsrId、TheRoleId)table,如下图所示。

这是配置:

public class AppUser : IdentityUser<int>
{
   ... // other properties
   public ICollection<AppUserRole> TheUserRolesList { get; set; }
}

public class AppRole : IdentityRole<int>
{
    public ICollection<AppUserRole> TheUserRolesList { get; set; }
}

 public class AppUserRole : IdentityUserRole<int>
{
    public AppUser TheUser { get; set; }
    public AppRole TheRole { get; set; }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    
    modelBuilder.Entity<AppUser>(b =>
    {
        b.HasMany(x => x.TheUserRolesList)
            .WithOne(x => x.TheUser)
            .HasForeignKey(x => x.UserId)
            .IsRequired();
    });

    modelBuilder.Entity<AppRole>(b =>
    {
        b.HasMany(e => e.UserRoles)
            .WithOne(e => e.Role)
            .HasForeignKey(ur => ur.RoleId)
            .IsRequired();
    });

    base.OnModelCreating(modelBuilder);
}

我尝试了几种方法,例如 并将 TheUser 的名称更改为 User 但最终,我将 UserId1 作为外键。

ASP.NET 当您不在 类.

中编写任何内容时,Core Identity 会在 AppRole 和 AppUserRole 中自行创建自己的关系和列

在 AppUserRole 中,当您创建 TheUser 和 TheRole 属性时,entity framework 在其末尾添加“Id”并创建新关系。所以这是entity framework.

的规则

您应该将它们全部删除并尝试查看原因。

最后,我注意到这是 EntityFrameworkCore 版本 5.0.4 中的一个错误,更新到 5.0.17 后问题解决了。