我有以下代码。但是必须有一个更有数据库效率的方法来做到这一点,因为,如果我错了数据库查询的数量,请纠正我 (1 +(具有管理员角色的用户数量))
使用新的MVC 4项目,成员资格默认值为表UserProfile,webpages_Roles和webpages_UsersInRoles。我看到很多Roles.Get *的内置方法。如果我想避免编写像我下面的代码,我需要显式创建webpages_Roles和webpages_UsersInRoles的模型以及所有代码的第一个属性?从Roles.Get *获取用户名只是不够,我需要完整的UserProfile。
仅供参考,下面的“UserRole”对象只是一个枚举
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);
}
答案 0 :(得分:5)
是的,你不想这样做。这是一种非常低效的方式。
相反,请按照设计使用这些工具。例如,像这样:
var usernames = Roles.GetUsersInRole(UserRole.SiteAdministrator.ToString());
var adminUsers = dbContext.UserProfiles
.Where(x => usernames.Contains(x.Username)).ToList();
return View(adminUsers);