private void RemoveUsersFromRoles(List<NhUserAccount> users, List<Role> roles) { if (users == null || users.Count == 0 || roles == null || roles.Count == 0) return; StringBuilder message=new StringBuilder(); using (var scope = new UnitOfWorkScope()) { foreach (var userEntity in users) { if (userEntity.Roles != null && userEntity.Roles.Any()) { int oldCount = userEntity.Roles.Count; var matchedRoles = roles.Intersect(userEntity.Roles); message.AppendFormat("Role(s) {0} are removed from user {1}.", string.Join(",", matchedRoles.Select(x => x.Name)), userEntity.Username); foreach (var matchedRole in matchedRoles) userEntity.Roles.Remove(matchedRole); if (oldCount != userEntity.Roles.Count) { _userRepository.Update(userEntity); } } } scope.Commit(); } if (message.Length > 0) { ActivityLog item = new ActivityLog(ActivityType.RemoveUserFromRole.ToString(), message.ToString()); _activityLogService.Add(item); } }