私は次のコードを持っています。しかし、これを行うには、よりデータベース効率の高い方法が必要です。なぜなら、Imが間違っている場合は、データベースクエリの数が(1 +(管理者ロールを持つユーザーの数))である場合に修正してください。
新しいMVC4プロジェクトでは、メンバーシップのデフォルトは、テーブル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);
}