我有以下代码。但必须有一种更有效的数据库方法来做到这一点,因为,如果我错了,请纠正我,数据库查询的数量是 (1 + (具有管理员角色的用户数量))
对于新的 MVC 4 项目,成员资格默认值为表 UserProfile、webpages_Roles 和 keywords_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);
}
最佳答案
是的,你不想那样做。这是一种非常低效的方式。
相反,请按照设计的方式使用这些工具。例如,像这样:
var usernames = Roles.GetUsersInRole(UserRole.SiteAdministrator.ToString());
var adminUsers = dbContext.UserProfiles
.Where(x => usernames.Contains(x.Username)).ToList();
return View(adminUsers);
关于asp.net-mvc - SimpleMembership MVC 4从在webpages_Roles中具有角色的UserProfile获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12504002/