private async Task SetCategory(Image img, ImageFormVM imgForm) { if (string.IsNullOrWhiteSpace(imgForm.Category)) { img.Category = null; } else { var category = PendingCategories.Find(c => c.Name.ToLower() == imgForm.Category.ToLower()); if (category != null) { img.Category = category; return; } category = await _db.Categories.FirstOrDefaultAsync(c => c.Name.ToLower() == imgForm.Category.ToLower()); if (category == null) { category = new Category { Name = imgForm.Category }; PendingCategories.Add(category); _db.Categories.Add(category); } img.Category = category; } }
private async Task SetTags(Image img, ImageFormVM imgForm) { if (string.IsNullOrWhiteSpace(imgForm.Tags)) { if (img.ImageTags == null) { return; } else { _db.ImageTags.RemoveRange(img.ImageTags); } } else { var currentTags = img.ImageTags == null ? new string[] { } : img.ImageTags.Select(it => it.Tag.Name.ToLower()); var formTags = imgForm.Tags.Split(",").Select(t => t.Trim().ToLower()); var tagsToAdd = new List <string>(); var tagsToRemove = new List <string>(); foreach (var tag in currentTags) { if (!formTags.Contains(tag)) { tagsToRemove.Add(tag); } } foreach (var tag in formTags) { if (!currentTags.Contains(tag)) { tagsToAdd.Add(tag); } } foreach (var tag in tagsToAdd) { var tagRec = PendingTags.Find(t => t.Name.ToLower() == tag); if (tagRec == null) { tagRec = await _db.Tags.FirstOrDefaultAsync(t => t.Name == tag); if (tagRec == null) { tagRec = new Tag { Name = tag }; PendingTags.Add(tagRec); _db.Tags.Add(tagRec); } } var imgTag = new ImageTag { Image = img, Tag = tagRec }; _db.ImageTags.Add(imgTag); } foreach (var tag in tagsToRemove) { var imgTag = await _db.ImageTags.Include(it => it.Tag).FirstOrDefaultAsync(it => it.ImageId == img.Id && it.Tag.Name == tag); if (imgTag != null) { _db.ImageTags.Remove(imgTag); } } } }