asp.net-mvc - SimpleMembership MVC 4从在webpages_Roles中具有角色的UserProfile获取数据

标签 asp.net-mvc entity-framework asp.net-mvc-4

我有以下代码。但必须有一种更有效的数据库方法来做到这一点,因为,如果我错了,请纠正我,数据库查询的数量是 (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/

相关文章:

c# - 我如何在 ASP.NET MVC 5 中抽象出这种重复模式?

javascript - 将 Angular 与 Bootstrap 模态结合使用存在多个问题

javascript - MVC .NET 上的 ajax 帖子未正确传递数组

c# - Entity Framework 和可移植类库

c# - 动态数据表到实体*无需*提前进行硬编码...?

asp.net-mvc - 在asp mvc中使用json上传图像

c# - 设置 MVC ASP.NET 应用程序来执行计划任务 - 实现方法?

c# - 空对象不能转换为值类型

c# - 使用数据注释将十进制值验证为小数点后两位?

c# - 使用 Linq 关联防止空异常