I am configuring identity user, I have seeded users with roles by many to many relationship as follows:
public class AppUser : IdentityUser
{
public string DisplayName { get; set;}
public ICollection<AppUserRole> UserRoles { get; set;}
}
public class AppRole : IdentityRole
{
public ICollection<AppUserRole> UserRoles { get; set; }
}
public class AppUserRole : IdentityUserRole<string>
{
public AppUser User { get; set; }
public AppRole Role { get; set; }
}
builder.Entity<AppUser>()
.HasMany(ur => ur.UserRoles)
.WithOne(u => u.User)
.HasForeignKey(ur => ur.UserId)
.IsRequired();
builder.Entity<AppRole>()
.HasMany(ur => ur.UserRoles)
.WithOne(u => u.Role)
.HasForeignKey(ur => ur.RoleId)
.IsRequired();
In the screenshot - why am I getting the shadow id UserId1, RoleId1?
I am trying to get all user with their respective roles or roles
public UsersController(UserManager<AppUser> userManager)
{
_userManager = userManager;
}
public async Task<ActionResult> GetUsersWithRoles()
{
var users = await _userManager.Users
.Include(r => r.UserRoles)
.ThenInclude(r => r.Role)
// .OrderBy(u => u.UserName)
.Select(u => new
{
// u.Id,
Username = u.UserName,
DisplayName = u.DisplayName,
Role = u.UserRoles.Select(r => r.Role.Name).ToList()
})
.ToListAsync();
return Ok(users);
}
I am getting the users with empty role array... but I think this code should work