如何在 RoleProvider 类中实现 AddUsersToRoles 方法?
Posted
技术标签:
【中文标题】如何在 RoleProvider 类中实现 AddUsersToRoles 方法?【英文标题】:How to implement AddUsersToRoles method in RoleProvider class? 【发布时间】:2020-12-17 15:33:02 【问题描述】:我正在开发一个简单的 mvc 应用程序,其中通过选择列表显示所有用户,并通过另一个选择列表显示所有角色。我想从用户下拉列表中选择一个用户,从角色下拉列表中选择角色。我已经完成了所有工作,但我不知道如何在 Role Provider 类中实现 AddUsersToRoles 方法,而且我也没有从互联网上获得任何示例。请为我提供 AddUsersToRoles 方法的示例。我尝试过这样,但它给出了一个错误,不能将隐蔽类型 string[] 隐含为 int。请提供解决方案。
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
EmployeeDBContext context = new EmployeeDBContext();
UserRolesMapping userRolesMapping = new UserRolesMapping();
userRolesMapping.RoleID = roleNames;
userRolesMapping.UserID = usernames;
context.SaveChanges();
【问题讨论】:
【参考方案1】:在 Microsoft 的 documentation 上有一个实现此方法的示例。
您可能需要根据您使用实体框架的标签更改该示例的后半部分(转到 Odbc 的位置)。
基本上,您需要另一个数据库表UsersInRoles
将User
链接到Role
。然后,在该表中为usernames
和roleNames
的每个组合创建一行。
-- 编辑:
根据您的示例,您似乎正朝着正确的方向前进。但是,您尝试将 string
存储到 int
属性中。
我不知道您的确切模型结构,但它应该看起来像这样:
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
using (EmployeeDBContext context = new EmployeeDBContext())
if (context.UsersInRoles == null)
context.UsersInRoles = new List<UserRolesMapping>();
foreach (string username in usernames)
foreach (string roleName in roleNames)
if(IsUserInRole(username, roleName)) continue;
UserRolesMapping userRoleMapping = new UserRolesMapping();
userRoleMapping.Role = roleNames;
userRoleMapping.User = usernames;
context.UsersInRoles.Add(userRoleMapping);
context.SaveChanges();
private static bool IsUserInRole(string username, string roleName)
using (EmployeeDBContext context = new EmployeeDBContext())
var userRole = context.UsersInRoles.FirstOrDefault(x => x.User == username && x.Role == roleName);
return userRole != null;
请注意,您需要进行其他代码更改才能使其正常工作,即本例中的Role
和User
是string
s,而不是int
【讨论】:
请看我的代码我试过这样但它给出了一个错误,无法将类型 string[] 隐式转换为 int。我该怎么办?请帮忙。 我已经用一个例子编辑了我的答案。您将需要更改项目中的一些代码并调整我的建议以使用您的代码。以上是关于如何在 RoleProvider 类中实现 AddUsersToRoles 方法?的主要内容,如果未能解决你的问题,请参考以下文章
使用类的 ArrayList 在 Spring 中实现 CRUD
如何在Castle.Core中实现IProxyGenerationHook的类中实现Equals和GetHashCode的覆盖方法?