2

我有以下代码。但是必须有一种更高效的数据库方法来执行此操作,因为如果我错了,请纠正我数据库查询的数量是(1 +(具有管理员角色的用户数量))

对于新的 MVC 4 项目,成员资格默认值为表 UserProfile、webpages_Roles 和 pages_UsersInRoles。我看到很多 Roles.Get* 的内置方法。如果我想避免编写像下面这样的代码,我是否需要为 pages_Roles 和 pages_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);
    }
4

1 回答 1

5

是的,你不想那样做。这是一种非常低效的方式。

相反,请按照设计使用这些工具。例如,像这样:

var usernames = Roles.GetUsersInRole(UserRole.SiteAdministrator.ToString());

var adminUsers = dbContext.UserProfiles
     .Where(x => usernames.Contains(x.Username)).ToList();

return View(adminUsers);
于 2012-09-20T01:19:12.053 回答