如何解决如何在RoleProvider类中实现AddUsersToRoles方法?
我正在开发一个简单的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();
}
解决方法
在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
,而不是int
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。