尝试在Linq查询中使用导航属性而不会获得任何结果。不知道为什么。
我在SQL Server中使用标准的简单成员资格表和实体框架。所以我把三张桌子AspNetUsers,AspNetRoles和AspNetUserRoles拉到了我的模型中(见下图)
是的,我知道我可以使用角色/身份功能,我只是使用这些表格来尝试这些LINQ QUERY,这些表格使用方便
无论如何,我的目标是使用导航属性来获取给定用户的角色。 AspNetUserRoles不会作为一个实体被拉入我的模型,因为它没有主键,所以这似乎是正确的方法。我尝试使用此处提供的建议:
Linq to entities navigation properties
以下linq查询返回0结果
var result = (from r in context.AspNetRoles
where r.AspNetUsers.Any(u => u.Id == UserId)
select r).ToList();
return result;
想到也许我需要使用Include扩展所以我试过这个,也返回0结果
var result = (from r in context.AspNetRoles
where r.AspNetUsers.Any(u => u.Id == UserId)
select r).Include("AspNetUsers").ToList();
return result;
我知道我在做错了一行:
where r.AspNetUsers.Any(u => u.Id == UserId)
因为如果我将其删除,我会得到结果,但当然不是针对特定用户。
我正在尝试遵循其中一个答案中给出的建议:
有什么想法吗?
提前致谢!
答案 0 :(得分:0)
如果我理解正确,您希望根据用户ID获取所有用户角色。
除非我遗漏了一些关于您的用户模型的信息,否则如果不访问AspNetUserRoles
则无法获得此信息。
如果您可以访问该表,那么这变得非常简单:
var result = AspNetUserRoles.Where(role => role.UserId == UserId)
.Select(userRole => AspNetRoles.First(role => role.Id == userRole.RoleId));
或者在查询语法中:
var result = from userRole in AspNetUserRoles
where userRole.UserId == UserId
from role in AspNetRoles
where role.Id == userRole.RoleId
select role;