public override async Task <Article> CreateArticle(string authedUsername, NewArticle newArticle) { var transaction = _context.Database.BeginTransaction(); try { IdentityUser author = await _userManager.FindByNameAsync(authedUsername); String authorId = author.Id; ArticleDAO createdArticle = _articleRepository.CreateArticle( title: newArticle.Title, description: newArticle.Description, body: newArticle.Body, authorId: authorId); _context.SaveChanges(); List <TagDAO> tags = _tagsRepository.SaveTags(newArticle.TagList); _context.SaveChanges(); _articleTagsRepository.SaveArticleTags(tags.Select(e => e.Id).ToList(), createdArticle.Id); _context.SaveChanges(); Article article = await CreateArticleFromDAO(createdArticle, authedUsername); transaction.Commit(); return(article); } catch (Exception ex) { transaction.Rollback(); throw ex; } }