gpt4 book ai didi

c# - 通过linq访问asp net identity中的用户角色表

转载 作者:行者123 更新时间:2023-11-30 15:23:54 25 4
gpt4 key购买 nike

所以我可以访问 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 访问它,但我真的需要通过我的数据库调用来访问它

任何帮助都会很棒

最佳答案

鉴于您正在使用代码优先方法的 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)));

关于c# - 通过linq访问asp net identity中的用户角色表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33782053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com