private void AddOrUpdate(Item item, OperationType operation, IEnumerable <ChangedField> changedFields) { var userName = item.Statistics.UpdatedBy; if (string.IsNullOrEmpty(userName)) { userName = item.Statistics.CreatedBy; } if (!_userService.IsUserInRole(userName)) { return; } var user = _userAuditReportReposiotry.GetByUserName(userName); if (user == null) { var changes = new List <Change> { new Change(changedFields, operation) }; var changedItems = new List <ChangedItem> { new ChangedItem(item.ID.ToString(), item.Paths.FullPath, item.Language.Name, changes) }; var userRoles = RolesInRolesManager.GetRolesForUser(User.FromName(userName, false), true).Select(r => r.Name); user = new UserChange(userName, userRoles, changedItems); _userAuditReportReposiotry.Add(user); } else { var changedItem = user.ChangedItems.FirstOrDefault(i => i.ItemId.Equals(item.ID.ToString()) && i.Language.Equals(item.Language.Name)); if (changedItem == null) { changedItem = new ChangedItem(item.ID.ToString(), item.Paths.FullPath, item.Language.Name); user.ChangedItems.Add(changedItem); } changedItem.ItemPath = item.Paths.FullPath; var change = new Change(changedFields, operation); changedItem.Changes.Add(change); _userAuditReportReposiotry.Update(user); } }