在 2.2 版本中,我可以这样写:
List<Claim> claims = new List<Claim>();
var userRoles = await _userManager.GetRolesAsync(user);
foreach (var role in _roleManager.Roles.Where(a => userRoles.Contains(a.Name)))
{
claims.AddRange(await _roleManager.GetClaimsAsync(role));
}
return claims;
在3.1版本中,我遇到了这个错误:
System.InvalidOperationException: 已经存在与此命令相关联的打开的DataReader,必须先关闭它。
但是如果我在forEach语句中添加ToList(),它就能正常工作(像这样):
List<Claim> claims = new List<Claim>();
var userRoles = await _userManager.GetRolesAsync(user);
foreach (var role in _roleManager.Roles.Where(a => userRoles.Contains(a.Name)).ToList())
{
claims.AddRange(await _roleManager.GetClaimsAsync(role));
}
return claims;
我应该改变代码中所有使用了类似结构的地方,还是有一种方法可以使EF与之正常工作?