private void ChangeRolesOfArticle(int articleId, List <string> roles) { var articleAccess = new ArticlesAccess(); var rolesIdLast = _db.Roles.Where(x => roles.Any(c => c == x.Name)).Select(x => x.Id).ToArray(); var userRoles = _db.ArticlesAccesses.Include(x => x.Role) .Where(x => x.ArticleId == articleId) .Select(x => x.Role.Id).ToList(); // получаем список ролей, которые были добавлены var addedRoles = rolesIdLast.Except(userRoles); // получаем роли, которые были удалены var removedRoles = userRoles.Except(rolesIdLast); // Add new Roles foreach (var role in addedRoles) { _db.ArticlesAccesses.Add(new ArticlesAccess() { ArticleId = articleId, RoleId = role }); } // Delete old roles foreach (var role in removedRoles) { var access = _db.ArticlesAccesses.FirstOrDefault(x => x.RoleId == role && x.ArticleId == articleId); if (access != null) { _db.Entry(access).State = EntityState.Deleted; } } }
/// <summary> /// Delete Roles in ArticleAccess /// </summary> /// <param name="articleId"></param> private void DeleteRolesOfArticle(int articleId) { var articleAccess = new ArticlesAccess(); var userRoles = _db.ArticlesAccesses.Include(x => x.Role) .Where(x => x.ArticleId == articleId) .Select(x => x.Role.Id).ToList(); // Delete old roles foreach (var role in userRoles) { var access = _db.ArticlesAccesses.FirstOrDefault(x => x.RoleId == role && x.ArticleId == articleId); if (access != null) { _db.Entry(access).State = EntityState.Deleted; } } }