簡體   English   中英

我在使用 UserManager.IsInRoleAsync() 時收到 InvalidOperationException

[英]Im getting InvalidOperationException when using UserManager.IsInRoleAsync()

我試圖讓所有用戶都擔任我正在編輯的角色。 但是當我加載頁面時它一直給我

InvalidOperationException:當此命令有打開的 DataReader 時,無法設置 MySqlCommand.CommandText; 它必須先關閉。

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);

Users屬性是一個IQueryable<User>看起來它在您迭代數據時保持對數據的開放流式查詢,如果您嘗試執行第二個操作,這會導致問題。

因此,假設用戶目錄不是很大,您可以簡單地解決這個問題:

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

它在迭代之前急切地完成了第一個查詢。


然而! 你可能想在看GetUsersInRoleAsync代替

foreach (var user in userManager.GetUsersInRoleAsync(role.Name))
{
    model.Users.Add(user.UserName);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM