我正在使用Identity 2
和EF 6
,我想获取一个用户ID的角色对象列表或roleId的用户对象列表。
IEnumerable<TRole> GetUserRoles<TRole>(string userId) where TRole : class, IRole<string>
IEnumerable<TUser> GetRoleUsers<TUser>(string roleId) where TUser : class, IUser<string>
实体框架似乎没有公开TUser
和TRole
之间关系的链接表,所以即使使用EF也似乎很棘手。
看起来有效接近的唯一方法是使用SQL直接查询数据库。
有没有人有解决方案在框架内实现这些方法?
答案 0 :(得分:2)
如果您需要Entity Framework解决方案,则可以使用类似SQL的查询表达式
public IEnumerable<TRole> GetUserRoles<TRole>(string userId) where TRole : class, IRole<string>
{
return (from ur in db.Set<IdentityUserRole>()
where ur.UserId == userId
join r in db.Roles on ur.RoleId equals r.Id
select r) as IEnumerable<TRole>;
}
public IEnumerable<TUser> GetRoleUsers<TUser>(string roleId) where TUser : class, IUser<string>
{
return (from ur in db.Set<IdentityUserRole>()
where ur.RoleId == roleId
join u in db.Users on ur.UserId equals u.Id
select u) as IEnumerable<TUser>;
}