private void PutTags(PageBE page, List <TagBE> newTags) { List <TagBE> existingTags = GetTagsForPage(page).ToList(); // retrieve a diff of the existing and new tags List <TagBE> added; List <uint> removed; var diffSummary = CompareTagSets(existingTags, newTags, out added, out removed); // add and delete tags as determined from the diff added = InsertTags(page.ID, added); _session.TagMapping_Delete(page.ID, removed); if ((0 < added.Count) || (0 < removed.Count)) { RecentChangeBL.AddTagsRecentChange(_dekiContext.Now, page, _user, diffSummary); } PageBL.Touch(page, _dekiContext.Now); _eventSink.PageTagsUpdate(_dekiContext.Now, page, _user); }