/// <summary> /// 更新文章 /// </summary> /// <param name="id"></param> /// <param name="dto"></param> /// <returns></returns> public async Task <ActionOutput <string> > UpdatePost(int id, PostForAdminDto dto) { var output = new ActionOutput <string>(); var post = new Post { Id = id, Title = dto.Title, Author = dto.Author, Url = $"{dto.CreationTime?.ToString(" yyyy MM dd ").Replace(" ", "/")}{dto.Url}/", Html = dto.Html, Markdown = dto.Markdown, CreationTime = dto.CreationTime, CategoryId = dto.CategoryId }; await _postRepository.UpdateAsync(post); var tags = await _tagRepository.GetAllListAsync(); var oldPostTags = (from post_tags in await _postTagRepository.GetAllListAsync() join tag in await _tagRepository.GetAllListAsync() on post_tags.TagId equals tag.Id where post_tags.PostId == post.Id select new { post_tags.Id, tag.TagName }).ToList(); foreach (var item in oldPostTags) { if (!dto.Tags.Any(x => x == item.TagName) && tags.Any(t => t.TagName == item.TagName)) { await _postTagRepository.DeleteAsync(item.Id); } } var newTags = new List <Tag>(); foreach (var item in dto.Tags) { if (!tags.Any(x => x.TagName == item)) { newTags.Add(new Tag { TagName = item, DisplayName = item }); } } await _tagRepository.BulkInsertTagsAsync(newTags); var postTags = new List <PostTag>(); foreach (var item in dto.Tags) { if (!oldPostTags.Any(x => x.TagName == item)) { var tagId = _tagRepository.FirstOrDefaultAsync(x => x.TagName == item).Result.Id; postTags.Add(new PostTag { PostId = id, TagId = tagId }); } } await _postTagRepository.BulkInsertPostTagsAsync(postTags); output.Result = "success"; return(output); }