你的位置:首页 > 数据库

[数据库]为用户分配角色 C#


开发网站时,在后台管理系统中,如果有多类角色,将会涉及到为角色分配用户的功能,或者是为用户选择角色。为用户分配角色相对来说操作的数据量比较小,因为系统所设定的角色不会有很多种。而如果是为角色分配用户,操作的数据量就比较大。

数据库表的设计 User_Role

UserIDRoleID
11
12
13

 

 

 

需要修改角色对应的用户时,即在界面上重新勾选相应的用户,然后再保存,最开始采取的做法先删除该类角色对应的所有用户,然后在插入本次保存的用户ID。这种做法的效率很低。因为大多数情况下只是对某类角色下的个别用户进行添加或者删除。

把第一次存入User_Role表的所有UserID设为集合A,把修改后用户所勾选的所有用户的UserID设为集合B

   

             图一

大部分情况下,是如下图所示

            图二

可能也会出现,原有的用户全部保留,又新添加一批用户。或者是在原有用户的基础上删除一些用户、分别如图三和图四所示

          图三                                                                                          图四

public static async Task UpdateUsersOfRole(int roleid,IEnumerable<int> originuserids,IEnumerable<int> nowuserids)    {      if (null == nowuserids)        nowuserids = new int[] { };      if (null == originuserids)        originuserids = new int[] { };      using (MasonDB db = new MasonDB())      {        var deletelist = originuserids.Except(nowuserids);        if (deletelist.Count() > 0)        {           var todelete = deletelist.Select(urm => new User_Role { UserID = urm, RoleID = roleid }).ToArray();          //db.Entry(todelete).State = EntityState.Deleted;          foreach(var d in todelete)            db.Entry(d).State = EntityState.Deleted;          db.User_Role_Mappings.RemoveRange(todelete);         }        var addlist = nowuserids.Except(originuserids);        if(addlist.Count() > 0)          db.User_Role_Mappings.AddRange(addlist.Select(urm => new User_Role { UserID = urm, RoleID = roleid }).ToArray()          );        await db.SaveChangesAsync();      }        }

 

如果不加

foreach(var d in todelete)  db.Entry(d).State = EntityState.Deleted;

会提示错误{"The object cannot be deleted because it was not found in the ObjectStateManager."}

 


 




美国旅游时间美国旅游跟团现在去美国旅游多少钱深圳到墨西哥旅游深圳去墨西哥旅游报价趣玩山水乐游海盐 智慧旅游嘉年华精彩上演(组图) 新加坡旅游不可错过的十大趣味美食(全文) 美景美食:8个理由令你让上菲律宾(全文) 日本惊现痔疮神殿 专治痔疮香客火爆 惠州川龙峡漂流团购价格?川龙峡漂流怎么团购? 惠州川龙峡漂流团购价格?川龙峡漂流门票多少钱? 惠州川龙峡漂流多大孩子可以玩?川龙峡漂流儿童怎么收费? 惠州川龙峡漂流网上订票多少钱?川龙峡漂流团购怎么买? 河南哪些景区五一免票?五一河南景区门票免费吗? 康琦赛欢乐世界有薰衣草吗?湛江康琦赛欢乐世界能摘草莓吗? 贵州杉木河五一期间漂流开放吗?杉木河五一有什么好玩的活动? 泰安方特游乐园五一有什么好玩的?泰安方特五一优惠吗? 福建福鼎有什么地方特色小吃啊? 福建永泰云顶山好玩吗?有什么特色看点啊? 温州到福建九鲤溪该怎么走?多远? 福建永泰云顶山门票多少?学生有没有优惠价? NA18101-300901 Datasheet NA18101-300901 Datasheet NA18101-300112 Datasheet NA18101-300112 Datasheet NA18101-300101 Datasheet NA18101-300101 Datasheet 深圳去三清山旅行团 深圳去三清山旅行团 深圳去三清山旅行团 江西旅游经典线路 江西旅游经典线路 江西旅游经典线路 深圳去井冈山旅游 深圳去井冈山旅游 深圳去井冈山旅游