在Identity中,AspNetUserRoles表通过User和Role实体与AspNetUsers和AspNetRoles表进行关联。ASP.NET Core Identity在AspNetUserRoles表中添加了两个外键AspNetUsersId和RoleId,来表示User-AspNetUserRole和AspNetUserRole-Role之间的关联。
对于这个问题的解决方法,我们可以在模型创建时手动配置AspNetUserRoles表的关联。代码示例如下:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity>(entity => {
entity.HasKey(key => new { key.UserId, key.RoleId });
entity.HasOne(d => d.Role)
.WithMany(p => p.Users)
.HasForeignKey(d => d.RoleId)
.IsRequired();
entity.HasOne(d => d.User)
.WithMany(p => p.Roles)
.HasForeignKey(d => d.UserId)
.IsRequired();
});
}
在上述代码中,我们在模型创建方法中手动指定了IdentityUserRole实体的主键,并配置了AspNetUserRoles表的两个外键。我们使用HasOne和WithMany方法配置User和Role之间的关联,并指定了外键属性。其中,IsRequired方法用于指定外键属性是否为必需的。
通过手动指定AspNetUserRoles表的关联,我们就能解决ASP.NET Core Identity在AspNetUserRoles表中添加额外外键的问题。