예제 #1
0
        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));
        }
예제 #2
0
        public async Task <ArticleDto> CreateOrEditArticleAsync(CreateOrUpdateArticleDto input)
        {
            if (input.Id.HasValue)
            {
                return(await UpdateArticleAsync(input));
            }

            return(await CreateArticleAsync(input));
        }
예제 #3
0
 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);
     }
 }
예제 #4
0
        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));
        }