所以我可以访问User表,但我需要在linq语句中进一步查询以查看它们是否已添加到特定用户角色
var managers = (from a in db.Users
join b in db.**UserRoles** on a.Id equals b.Id
where a.IsManager == true select a).ToList();
我知道您可以使用User.IsInRole通过html访问它,但我真的需要通过我的数据库调用来访问它
任何帮助都会很棒
答案 0 :(得分:4)
鉴于您使用asp.net身份和代码优先方法?您可以单独访问用户或角色表(db.Users / db.Roles)。如果要访问用户的角色,可以执行db.Users.Roles。但是,这只会返回你角色的id(这里没有导航属性..)
要按角色名检查角色中的用户,可以将user.Roles与db.Roles一起加入,并检查db.Roles中的角色名称。像这样:
using (var db = new ApplicationDbContext())
{
var user1 = new ApplicationUser { Email = "user1@test.com", UserName = "User #1"};
var user2 = new ApplicationUser { Email = "user2@test.com", UserName = "User #2 - No Roles" };
var role1 = new IdentityRole("SomeRole");
db.Users.Add(user1);
db.Users.Add(user2);
db.Roles.Add(role1);
db.SaveChanges();
user1.Roles.Add(new IdentityUserRole { RoleId = role1.Id });
db.SaveChanges();
var usersInRole = db.Users.Where(u =>
u.Roles.Join(db.Roles, usrRole => usrRole.RoleId,
role => role.Id, (usrRole, role) => role).Any(r => r.Name.Equals("SomeRole"))).ToList();}
或者,您可以先获取角色,然后选中
var usersinRole = db.Users.Where(u => u.Roles.Any(r => r.RoleId.Equals(someRoleId)));
答案 1 :(得分:0)