Запрос списка пользователей в удостоверениях вместе с их ролями дает проблему с безопасностью контекстного потока - PullRequest
0 голосов
/ 02 июля 2018

У меня есть код как показано ниже:

[HttpGet]
        public IActionResult UserList()
        {
            List<UserListViewModel> model = new List<UserListViewModel>();
            model = _userManager.Users.Select(u => new UserListViewModel
            {
                Id = u.Id,
                Name = u.UserName,
                Email = u.Email,
                RoleName = _userManager.GetRolesAsync(u).Result.Single()
            }).ToList();
            return View(model);
        }

Я пытаюсь получить список пользователей и их роли. Каждому пользователю назначается только одна роль. Запуск выше кода дает мне некоторую ошибку безопасности потока, такую ​​как ниже, которую я не могу понять. Предложите несколько способов.

System.AggregateException: 'One or more errors occurred. (A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.)'

1 Ответ

0 голосов
/ 02 июля 2018

Вот эта строка кода:

RoleName = _userManager.GetRolesAsync(u).Result.Single()

Нельзя использовать асинхронный метод в Entity Framework.

Я бы предложил выполнить объединение в запросе LINQ, а затем вернуть UsersListViewModel. Что-то вроде:

var model = (
    from u in _userManager.Users
    join r in _userManager.Roles on u.Id equals r.UserId
    select new UserListViewModel
        {
            Id = u.Id,
            Name = u.UserName,
            Email = u.Email,
            RoleName = r.RoleName
        } 
).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...