gpt4 book ai didi

linq - 如何将 users 表正确连接到 Membership 表,或者您应该这样做吗?

转载 作者:行者123 更新时间:2023-12-04 06:21:09 25 4
gpt4 key购买 nike

我可能会以错误的方式解决这个问题,请随时纠正我。

目前我有一个名为 U_USER 的用户模型,它包含诸如地址、接收通知、HasCompanyCar 等字段。

这些用户在 .NET Membership 表中具有角色。当用户通过 Membership 登录时,我在我的数据库中获取他们的用户记录如下(Membership 表上的用户名和我自己的 U_USER 表将匹配):

        //Gets the current user
public U_USER CurrentUser()
{
return GetUser(HttpContext.Current.User.Identity.Name);
}

//Gets user details by username
public U_USER GetUser(String username)
{
return (from u in db.U_USER
where u.UserName == username
select u).FirstOrDefault();
}

如果我想获得所有用户的列表,比如说“创建”角色,那么我会这样做:
allUsers.Where(x => Roles.IsUserInRole(x.UserName, "Create"))

这是一个很大的性能损失,因为它正在为用户的每次迭代进行查找。这让我觉得我没有以正确的方式进行用户管理。所以要回答这个问题:

您应该如何正确地将 Membership 连接到一个用户表,而该表又连接到您的其余数据?我也接受如何更有效地进行操作!

非常感谢 :)

编辑:

我通过以下代码提高了性能。我一举让用户担任该角色,然后对其进行过滤。
String[] usersInRole = Roles.GetUsersInRole("CanApprove");
users = users.Where(x => usersInRole.Any(y => y == x.UserName));

但我仍然相当确定我在这一切都错了!

最佳答案

不是这方面的专家,但我的应用程序通常做的是使用外键(带索引)从我自己的 Users 表到使用 Guid 字段和 Membership 的 Membership Users 表。这允许我使用 Linq 进行查询,例如:

 var query = from myUser in MyUsers
join aspUser in aspnet_Users on myUser.UserId equals aspUser.UserId
join usersInRole in aspnet_UsersInRoles on aspUser.UserId equals usersInRole.UserId
join role in aspnet_Roles on usersInRole.RoleId equals role.RoleId
where role ...
select new { ... };

(或者,如果您愿意,也可以使用像 myUser.AspUser.Roles.Role 这样的点形式让 ORM 生成连接)

为了提高性能,偶尔观察 SQL 跟踪是很好的 - 确保您没有为代码中的每个逻辑步骤进行过多的 SQL 往返。

希望那些对你有帮助。

更新 - 在回答你关于“你是否应该这样做”的问题时,我认为"is",但还有其他选择 - 例如您可以使用 Profile字段 - 请参阅此精彩演练中的第 6 步 - http://www.4guysfromrolla.com/articles/120705-1.aspx

关于linq - 如何将 users 表正确连接到 Membership 表,或者您应该这样做吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6549158/

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