SimpleMembership MVC 4从UserProfile获取具有webpages_Roles角色的数据

Mar*_*arc 2 asp.net-mvc entity-framework asp.net-mvc-4

我有以下代码.但是必须有更多的数据库有效的方法来做到这一点,因为,如果我错了数据库查询的数量是正确的我(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);
    }
Run Code Online (Sandbox Code Playgroud)

Eri*_*sch 5

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

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

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

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

return View(adminUsers);
Run Code Online (Sandbox Code Playgroud)