![](/img/trans.png)
[英]_userManager.IsInRoleAsync(user, roleName) just return false
[英]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.