2016-07-19 3 views
1

Я использую Identity 2 и EF 6, и я хотел бы получить список объектов ролей для идентификатора пользователя или списка объектов пользователя для roleId.Получить всех пользователей для роли или всех ролей для пользователя

IEnumerable<TRole> GetUserRoles<TRole>(string userId) where TRole : class, IRole<string> 

IEnumerable<TUser> GetRoleUsers<TUser>(string roleId) where TUser : class, IUser<string> 

Entity Framework не появляется, чтобы выставить таблицу, связывающую для отношений между TUser и TRole, так что даже с помощью EF кажется сложным.

Похоже, что единственный способ сделать это близко к эффективному - это напрямую обращаться к базе данных с помощью SQL.

У кого-нибудь есть решение для реализации этих методов в рамках?

ответ

1

Если вы хотите рамочное решение Entity вы можете использовать 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>; 
} 
Смежные вопросы