Ho il codice seguente. Ma ci deve essere un modo più efficiente di database per fare ciò, perché, correggimi se sbaglio, il numero delle query del database è (1 + (qty di utenti con ruolo di amministratore))
Con un nuovo progetto MVC 4 i valori predefiniti di appartenenza sono le tabelle UserProfile, webpages_Roles e pagine web_UsersInRoles. Vedo molti metodi integrati per Roles.Get *. Se voglio evitare di scrivere codice come quello che ho di seguito ho bisogno di creare esplicitamente un modello per webpages_Roles e webpages_UsersInRoles così come tutte le prime proprietà del codice? Ottenere solo il nome utente da Roles.Get * non è sufficiente, ho bisogno del completo UserProfile.
Per tua informazione l'oggetto "UserRole" qui sotto è solo un enum
public ActionResult Admins()
{
var dbContext = new UsersContext();
var usernames = Roles.GetUsersInRole(UserRole.SiteAdministrator.ToString());
var adminUsers = new List<UserProfile>();
foreach (string username in usernames)
{
var adminUser = dbContext.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == username);
adminUser.Roles.Add(UserRole.SiteAdministrator);
adminUsers.Add(adminUser);
}
return View(adminUsers);
}
Sì, non vuoi farlo in quel modo. Questo è un modo molto inefficiente.
Invece, usa gli strumenti come sono stati progettati. Ad esempio, qualcosa di simile:
var usernames = Roles.GetUsersInRole(UserRole.SiteAdministrator.ToString());
var adminUsers = dbContext.UserProfiles
.Where(x => usernames.Contains(x.Username)).ToList();
return View(adminUsers);