我正在开发基于 ASP.net Core 2.0 的项目。我创建了 ApplicationRole
和 ApplicationUser
类。当我运行我的项目时,我已经编写了一段用于制作角色的代码片段我遇到了这个错误:
System.Data.SqlClient.SqlException: 'Invalid column name 'ApplicationRoleId'.
但是我在 ASP.net Core 1.1 中使用的相同代码没有任何问题。
我认为这行代码有问题:
lineNumberOfUsers = r.Users.Count
因为当我评论这个代码项目时工作正常,但是我需要每个角色的用户数。
Controller :
public class ApplicationRoleController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly RoleManager<ApplicationRole> _roleManager;
public ApplicationRoleController(UserManager<ApplicationUser> userManager, RoleManager<ApplicationRole> roleManager)
{
_userManager = userManager;
_roleManager = roleManager;
}
public IActionResult Index()
{
List<ApplicationRoleViewModel> models = new List<ApplicationRoleViewModel>();
models = _roleManager.Roles.Select(r => new ApplicationRoleViewModel
{
Id = r.Id,
Name = r.Name,
Description = r.Description,
NumberOfUsers = r.Users.Count
}).ToList();
return View(models);
}
}
型号
public class ApplicationRole : IdentityRole
{
public string Description { get; set; }
public virtual ICollection<ApplicationUser> Users { get; } = new List<ApplicationUser>();
}
我已经在 sql server profiler 中检查了 sql 查询。当我在 sql server 中运行 sql 查询时,我得到了同样的错误。
Invalid column name 'ApplicationRoleId'.
SELECT [r].[Id], [r].[Name], [r].[Description], (
SELECT COUNT(*)
FROM [AspNetUsers] AS [a]
WHERE [r].[Id] = [a].[ApplicationRoleId]
) AS [NumberOfUsers]
FROM [AspNetRoles] AS [r]
最佳答案
不需要 ApplicationRole
类中的导航属性 Users
。
AspNetUsers
和 AspNetRoles
表之间的关系作为外键存在于单独的表 AspNetUserRoles
中。因此,当您想要查询给定角色中的用户数时,您需要查询该表 AspNetUserRoles
。为了实现这一点,您可以调用
_userManager.GetUsersInRoleAsync("roleName").Result.Count;
为此,请像这样实现您的 Index 操作方法:
public IActionResult Index()
{
List<ApplicationRoleViewModel> models = new List<ApplicationRoleViewModel>();
models = _roleManager.Roles.Select(r => new ApplicationRoleViewModel
{
Id = r.Id,
Name = r.Name,
Description = r.Description
// notice I am not assigning NumberOfUsers here.See further down...
}).ToList();
foreach(var m in models)
{
m.NumberOfUsers = _userManager.GetUsersInRoleAsync(m.Name).Result.Count;
}
return View(models);
}
希望这对您有所帮助。
关于c# - System.Data.SqlClient.SqlException : 'Invalid column name ' ApplicationRoleId'. ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49292161/