public ActionResult Create(CreateArticleViewModel articleVM)
        {
            if (ModelState.IsValid)
            {
                Article article = Mapper.MapToArticle(articleVM);
                db.Articles.Add(article);
                var userId = User.Identity.GetUserId();
                article.UserId = userId;
                article.TimeCreated = DateTime.Now;

                //add category
                Category category = db.Categories.FirstOrDefault(x => x.Name == articleVM.CategoryName.ToString());
                if (category != null)
                {
                    article.Category = category;
                    category.Articles.Add(article);
                }
                else
                {
                    ModelState.AddModelError("", "This category does not exist.");
                    return View(articleVM);
                }

                // add tags
                if (articleVM.Tags != null)
                {
                    RegexOptions options = RegexOptions.None;
                    Regex regex = new Regex(@"[ ]{2,}", options);
                    articleVM.Tags = regex.Replace(articleVM.Tags, @" ");
                    string[] tags = Regex.Split(articleVM.Tags, " ");
                    article.Tags = new List<Tag>();
                    foreach (string item in tags)
                    {
                        Tag tag = db.Tags.FirstOrDefault(x => x.Name == item);
                        if (tag != null)
                        {
                            if (!article.Tags.Contains(tag))
                            {
                                article.Tags.Add(tag);
                                tag.Articles.Add(article);
                            }
                        }
                        else
                        {
                            Tag newTag = new Tag();
                            newTag.Name = item;
                            db.Tags.Add(newTag);
                            article.Tags.Add(newTag);
                            newTag.Articles = new List<Article>();
                            newTag.Articles.Add(article);
                        }
                    }
                }

                db.SaveChanges();
                return RedirectToAction("Index");
            }
            else
            {
                ModelState.AddModelError("", "Check your input.");
            }

            return View(articleVM);
        }
        public ActionResult Edit(CreateArticleViewModel articleVM)
        {
            if (ModelState.IsValid)
            {
                Article article = db.Articles.Find(articleVM.Id);
                // set new category
                if (article.Category.Name != articleVM.CategoryName.ToString())
                {
                    Category category = db.Categories.FirstOrDefault(x => x.Name == articleVM.CategoryName.ToString());
                    if (category != null)
                    {
                        article.Category = category;
                        category.Articles.Add(article);
                    }
                    else
                    {
                        ModelState.AddModelError("", "This category does not exist.");
                        return View(articleVM);
                    }
                }

                // set new tags
                RegexOptions options = RegexOptions.None;
                Regex regex = new Regex(@"[ ]{2,}", options);
                articleVM.Tags = regex.Replace(articleVM.Tags, @" ");
                string[] tags = Regex.Split(articleVM.Tags, " ");
                foreach (string item in tags)
                {
                    if (article.Tags.FirstOrDefault(x => x.Name == item) == null)
                    {
                        Tag tag = db.Tags.FirstOrDefault(x => x.Name == item);
                        if (tag != null)
                        {
                            article.Tags.Add(tag);
                            tag.Articles.Add(article);
                        }
                        else
                        {
                            Tag newTag = new Tag();
                            newTag.Name = item;
                            db.Tags.Add(newTag);
                            newTag.Articles = new List<Article>();
                            newTag.Articles.Add(article);
                            article.Tags.Add(newTag);
                        }
                    }
                }

                db.Entry(article).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(articleVM);
        }