private static void ResetTags(IDataStoreContext ctx, TimeEntryData timeEntryData, TimeEntryJson json) { // Don't touch the tags when the field is null if (json.Tags == null) { return; } var con = ctx.Connection; // Resolve tags to IDs: var tagIds = new List <Guid> (); foreach (var tagName in json.Tags) { // Prevent importing empty (invalid) tags: if (String.IsNullOrWhiteSpace(tagName)) { continue; } var id = ctx.GetTagIdFromName(timeEntryData.WorkspaceId, tagName); if (id == Guid.Empty) { // Need to create a new tag: var tagData = new TagData() { Name = tagName, WorkspaceId = timeEntryData.WorkspaceId, }; con.Insert(tagData); id = timeEntryData.Id; } tagIds.Add(id); } // Iterate over TimeEntryTags and determine which to keep and which to discard: var inters = con.Table <TimeEntryTagData> ().Where(m => m.TimeEntryId == timeEntryData.Id); var toDelete = new List <TimeEntryTagData> (); foreach (var inter in inters) { if (tagIds.Contains(inter.TagId)) { tagIds.Remove(inter.TagId); } else { toDelete.Add(inter); } } // Delete unused tags intermediate rows: foreach (var inter in toDelete) { ctx.Delete(inter); } // Create new intermediate rows: foreach (var tagId in tagIds) { ctx.Put(new TimeEntryTagData() { TagId = tagId, TimeEntryId = timeEntryData.Id, }); } }
private static void ResetTags (IDataStoreContext ctx, TimeEntryData timeEntryData, TimeEntryJson json) { // Don't touch the tags when the field is null if (json.Tags == null) { return; } var con = ctx.Connection; // Resolve tags to IDs: var tagIds = new List<Guid> (); foreach (var tagName in json.Tags) { // Prevent importing empty (invalid) tags: if (String.IsNullOrWhiteSpace (tagName)) { continue; } var id = ctx.GetTagIdFromName (timeEntryData.WorkspaceId, tagName); if (id == Guid.Empty) { // Need to create a new tag: var tagData = new TagData () { Name = tagName, WorkspaceId = timeEntryData.WorkspaceId, }; con.Insert (tagData); id = timeEntryData.Id; } tagIds.Add (id); } // Iterate over TimeEntryTags and determine which to keep and which to discard: var inters = con.Table<TimeEntryTagData> ().Where (m => m.TimeEntryId == timeEntryData.Id); var toDelete = new List<TimeEntryTagData> (); foreach (var inter in inters) { if (tagIds.Contains (inter.TagId)) { tagIds.Remove (inter.TagId); } else { toDelete.Add (inter); } } // Delete unused tags intermediate rows: foreach (var inter in toDelete) { ctx.Delete (inter); } // Create new intermediate rows: foreach (var tagId in tagIds) { ctx.Put (new TimeEntryTagData () { TagId = tagId, TimeEntryId = timeEntryData.Id, }); } }