private void UpdateTags(int id, Patch patch, Data.Models.Patch existingPatch) { List <Tag> tagsToRemove = existingPatch.Tags.Where(tag => !patch.Tags.Any(x => x.Name == tag.Name && x.PatchId == id)).ToList(); List <Tag> tagsToAdd = ( from tag in patch.Tags where !existingPatch.Tags.Any(x => x.Name == tag.Name && x.PatchId == id) select new Tag { PatchId = id, Name = tag.Name }).ToList(); context.Tags.AddRange(tagsToAdd); context.Tags.RemoveRange(tagsToRemove); }
public async Task <IActionResult> PutPatch([FromRoute] int id, [FromBody] Patch patch) { if (!PatchExists(id)) { return(NotFound()); } patch.DateUpdated = DateTime.UtcNow; Data.Models.Patch existingPatch = context.Patches.Where(x => x.Id == id).Include(x => x.Tags).Single(); context.Entry(existingPatch).CurrentValues.SetValues(patch); UpdateTags(id, patch, existingPatch); await context.SaveChangesAsync(); cache.Remove(Constants.PatchCacheKey); return(NoContent()); }
public async Task <ActionResult <Patch> > PostPatch(Patch patch) { var patchToInsert = mapper.Map <Data.Models.Patch>(patch); patchToInsert.DateCreated = DateTime.UtcNow; patchToInsert.Tags = new List <Tag>(); foreach (Models.Tag tag in patch.Tags) { patchToInsert.Tags.Add(new Tag { Name = tag.Name }); } context.Patches.Add(patchToInsert); await context.SaveChangesAsync(); cache.Remove(Constants.PatchCacheKey); return(CreatedAtAction("GetPatch", patchToInsert)); }