Ho un modello di progetto predefinito del sito Web ASP.NET MVC 5 e sto cercando di elencare tutti gli utenti con nomi di ruolo (non ID).Come elencare gli utenti con nomi di ruolo in ASP.NET MVC 5
La query è:
db.Users.Include(u => u.Roles).ToList()
poi voglio stampare i nomi dei ruoli con qualcosa di simile:
@string.Join(", ", user.Roles.Select(r => r.RoleId))
Il problema è che posso raggiungere solo RoleId
, non di classe Ruolo dove Name
e altre proprietà sono memorizzate.
Potrei eseguire un'altra selezione per ottenere tutti i ruoli e quindi utilizzarla come ricerca. O scrivi direttamente un join nella query? Non so come, perché non ho accesso alla tabella con le entità IdentityUserRole
che uniscono utenti e ruoli.
La radice del problema sembra essere il fatto che è ruoli raccolta di IdentityUserRole
(non Role
) che contiene solo RoleId
e UserId
.
public class IdentityUserRole<TKey> {
public virtual TKey RoleId { get; set; }
public virtual TKey UserId { get; set; }
}
ho pensato che se uno vuole fare rapporto N-per-N in EF dovrebbero mettere direttamente collezione di Roles
e poi ignorare OnModelCreating
e specificare le relazioni. Questo approccio sembra complicare la navigazione degli oggetti da uno all'altro.
Perché hanno deciso di includere IdentityUserRole
come entità extra? Per essere in grado di aggiungere dati extra alle relazioni? Al costo di non essere in grado di navigare dagli utenti ai ruoli?
puoi facilmente passare da utente a ruolo, la tabella di join è lì perché c'è una relazione molti a molti. Non penso che il team di Identity crei un sistema di spazzatura per il divertimento .... –
@ No1_Melman Potrebbe includere un esempio della query (forse come risposta)? Grazie. – NightElfik
Sì, dammi un minuto –