為用戶分配角色 C#


開發網站時,在后台管理系統中,如果有多類角色,將會涉及到為角色分配用戶的功能,或者是為用戶選擇角色。為用戶分配角色相對來說操作的數據量比較小,因為系統所設定的角色不會有很多種。而如果是為角色分配用戶,操作的數據量就比較大。

數據庫表的設計 User_Role

UserID RoleID
1 1
1 2
1 3

 

 

 

需要修改角色對應的用戶時,即在界面上重新勾選相應的用戶,然后再保存,最開始采取的做法先刪除該類角色對應的所有用戶,然后在插入本次保存的用戶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."}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM