Ich habe den folgenden Code. Es muss jedoch eine effizientere Methode für die Datenbank geben, da dies korrigiert werden kann, wenn die Anzahl der Datenbankabfragen falsch ist (1 + (Anzahl der Benutzer mit Administratorrolle)).
Bei einem neuen MVC 4-Projekt sind die Standardwerte für die Mitgliedschaft die Tabellen UserProfile, webpages_Roles und webpages_UsersInRoles. Ich sehe viele integrierte Methoden für Roles.Get *. Wenn Sie vermeiden möchten, Code wie den folgenden Code zu schreiben, muss ich explizit ein Modell für webpages_Roles und webpages_UsersInRoles sowie alle ersten Eigenschaften des Codes erstellen? Nur den Benutzernamen von Roles zu bekommen. Get * reicht nicht aus, ich brauche das vollständige UserProfile.
Zu Ihrer Information Das "UserRole" Objekt unten ist nur eine Aufzählung
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);
}
Ja, du willst das nicht so machen. Das ist ein sehr ineffizienter Weg.
Verwenden Sie stattdessen die Werkzeuge so, wie sie entworfen wurden. Zum Beispiel so etwas:
var usernames = Roles.GetUsersInRole(UserRole.SiteAdministrator.ToString());
var adminUsers = dbContext.UserProfiles
.Where(x => usernames.Contains(x.Username)).ToList();
return View(adminUsers);