Я получаю InvalidOperationException при использовании UserManager.IsInRoleAsync ()

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

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 ответ


Свойство 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);
}

Есть идеи?

10000