2017-04-22 7 views
1

登録されたすべてのユーザーの一覧を役割名とともに取得し、viewModelを使用してそれらをビューに送信しようとすると、.NETに慣れています。ASP.NET Core 1.1ですべてのユーザーとその役割を取得する

は、ここでのViewModelです:

public class ApplicationUserListViewModel 
{ 
    [Display(Name = "User Email Address")] 
    public string UserEmail { get; set; } 

    public List<IdentityUserRole<string>> Roles { get; set; } 
} 

私は彼らの役割と一緒にすべてのユーザーを取得し、ユーザーごとにビューモデルを作成し、ビューに渡すリスト内のすべてのビューモデルを置くためにこれを試してみました:

しかし、これは、すべてのユーザーにロールが割り当てられていると、すべてのユーザーに対して常に0の役割を与えます。

+0

'_userManager.Users.Include(U => U。ロール) ' –

答えて

5

パフォーマンスの問題が発生するため、解決策は完璧ではありません。あなたのデータベースに1つのリクエストを実行してユーザに問い合わせ、foreachループでは、それぞれのユーザに対して新しいクエリを実行して、関連する役割を実際に悪くします。

  • つのクエリを、各ユーザーのロールを取得するには、ユーザーに
  • Xクエリを取得する:あなたは、データベース内Xのユーザーをした場合は、使用して終了します。

次のような1つのクエリの関連役割を含めることで、より良い行うことができます。

foreach (var user in _userManager.Users.Include(u => u.Roles).ToList()) 
{    
    list.Add(new ApplicationUserListViewModel { 
     UserEmail = user.Email, 
     Roles = user.Roles 
    }); 
} 

それとも、この:

var users = _userManager.Users.Include(u => u.Roles) 
         .Select(u => new ApplicationUserListViewModel { 
          UserEmail = user.Email, 
          Roles = user.Roles 
         }) 
         .ToList(); 
1

これはうまくいきました。これはおそらくそれがどのように行われるべきではありませんが、それは正常に動作します。

List<ApplicationUserListViewModel> list = new List<ApplicationUserListViewModel>(); 

foreach (var user in _userManager.Users.ToList()) 
{    
     list.Add(new ApplicationUserListViewModel() { 
       UserEmail = user.Email, 
       Roles = await _userManager.GetRolesAsync(user) 
      }); 
} 
関連する問題