private async Task <ArticleDto> UpdateArticleAsync(CreateOrUpdateArticleDto input) { var entity = await _articleRepository.FirstOrDefaultAsync(c => c.Id == input.Id.Value); await _articleRepository.EnsureCollectionLoadedAsync(entity, c => c.Categories); if (entity == null) { throw new ArgumentException("找不到指定的文章"); } Mapper.Map(input, entity); //找出该文章的所有分类(中间表Id,分类Id) var artCategorys = await _articleToCategoryRepository.GetAll().AsNoTracking().Where(c => c.ArtId == input.Id).ToListAsync(); var inputIdList = input.CatetoryIds.ToList(); foreach (var category in artCategorys) { //删除输入没有,但是原来分类有的分类 if (!inputIdList.Contains(category.CatId)) { //输入中没有该分类了,直接删除中间表 // entity.Categories.Remove(category); await _articleToCategoryRepository.DeleteAsync(c => c.Id == category.Id); } else { //包含,说明没有变动,该分类不需要处理,从输入中移除 inputIdList.Remove(category.CatId); } } //inputIdList中剩下的就是需要新增的。 var categorys = await _categoryRepository.GetAll().AsNoTracking().Where(c => inputIdList.Contains(c.Id)).ToListAsync(); if (inputIdList.Any()) { foreach (var catId in inputIdList) { CreateArticleToCategory(catId, entity); } } // await _articleRepository.EnsureCollectionLoadedAsync(entity, c => c.Categories); await _articleRepository.UpdateAsync(entity); await SaveChangeAsync(); return(Mapper.Map <ArticleDto>(entity)); }
public async Task <ArticleDto> CreateOrEditArticleAsync(CreateOrUpdateArticleDto input) { if (input.Id.HasValue) { return(await UpdateArticleAsync(input)); } return(await CreateArticleAsync(input)); }
public async Task CreateOrUpdateArticle(CreateOrUpdateArticleDto input) { if (input.Id.HasValue) { var article = _articleRepository.Get(input.Id.Value); article = input.MapTo(article); article.CategoryId = 1; await _articleRepository.UpdateAsync(article); } else { var article = input.MapTo <Article>(); article.CategoryId = 1; await _articleRepository.InsertAsync(article); } }
private async Task <ArticleDto> CreateArticleAsync(CreateOrUpdateArticleDto input) { var entity = Mapper.Map <Article>(input); entity.UserId = BlogSession.UserId ?? throw new Exception("用户未登录到系统。"); await _articleRepository.InsertAndGetIdAsync(entity); if (input.CatetoryIds.Any()) { foreach (var id in input.CatetoryIds) { CreateArticleToCategory(id, entity); } } await SaveChangeAsync(); return(Mapper.Map <ArticleDto>(entity)); }