Я получаю InvalidOperationException при использовании UserManager.IsInRoleAsyn c () - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь получить всех пользователей в роли, которую я редактирую. Но когда я загружаю страницу, она продолжает выдавать

InvalidOperationException: Невозможно установить MySqlCommand.CommandText, когда есть открытый DataReader для этой команды; сначала он должен быть закрыт.

public async Task<IActionResult> EditRole(string id)
{
    var role = await roleManager.FindByIdAsync(id);
    if(role == null)
     {
        ViewBag.ErrorMessage = $"Role with id = {id} cannot be found";
        return View("NotFound");
    }
    var model = new EditRoleModel
    {
        Id = role.Id,
        RoleName = role.Name
    };
    foreach(var user in userManager.Users)
    {
        var userInRole = await userManager.IsInRoleAsync(user, role.Name);
        if (userInRole)
        {
            model.Users.Add(user.UserName);
        }
    }
    return View(model);
}

Я получаю ошибку здесь

var userInRole = await userManager.IsInRoleAsync(user, role.Name);

1 Ответ

1 голос
/ 26 марта 2020

Свойство Users является IQueryable<User>, и оно выглядит как будто оно поддерживает открытый поток данных для данных во время итерации, что вызывает проблему, если вы пытаетесь выполнить вторая операция.

Таким образом, при условии, что каталог пользователя не огромен , вы, вероятно, можете обойти это, просто:

foreach(var user in userManager.Users.ToList())
{...}

, что завершает первый запрос w с нетерпением перед повторением.


Однако! Вы, вероятно, хотите посмотреть GetUsersInRoleAsync вместо :

foreach (var user in userManager.GetUsersInRoleAsync(role.Name))
{
    model.Users.Add(user.UserName);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...