Если вы посмотрите в определение IdentityUserRole, вы обнаружите, что у него уже есть первичные ключи
public class IdentityUserRole<TKey> where TKey : IEquatable<TKey>
{
public IdentityUserRole();
//
// Summary:
// Gets or sets the primary key of the user that is linked to a role.
public virtual TKey UserId { get; set; }
//
// Summary:
// Gets or sets the primary key of the role that is linked to the user.
public virtual TKey RoleId { get; set; }
}
мы должны переопределить реализацию роли пользователя.Теперь, если вы видите код, вы увидите, что мы можем переопределить его.Итак, я сделал это:
public class MyDbContext : IdentityDbContext<
User,
Role,
string,
IdentityUserClaim<string>,
UserRole,
IdentityUserLogin<string>,
IdentityRoleClaim<string>,
IdentityUserToken<string>>
// И это для переопределения первичных ключей в UserRole:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<UserRole>(userRole =>
{
userRole.HasKey(pr => new
{
pr.UserId,
pr.RoleId,
pr.ClientId
});
}
}
После того, как мы переопределим контекст базы данных, мы можемиспользуйте пользовательское TUserRole, например, вот так:
public class UserRole : IdentityUserRole<string>
{
[Required, StringLength(36)]
public string ClientId { get; set; }
[ForeignKey("ClientId")]
public virtual Client Client { get; set; }
public virtual User User { get; set; }
public virtual Role Role { get; set; }
}