public bool Update(PostVM viewModel)
        {
            var Question = db.Questions.SingleOrDefault(q => q.Id == viewModel.questionId && q.PostId == viewModel.PostId);

            Question.QuesetionTitle     = viewModel.QuesetionTitle;
            Question.PhotoUrl           = ImageUpload(viewModel.QPhotoFile).FirstOrDefault();
            Question.IsRequired         = viewModel.IsRequired;
            Question.IsRankeditorChoice = viewModel.IsRankeditorChoice;
            Question.EndDate            = viewModel.EndDate;
            Question.AnswerTypeId       = db.Answer_Types.Where(x => x.Type.Equals(viewModel.AnswerType)).Select(a => a.Id).FirstOrDefault();
            // comunity
            string[] communiyIds = viewModel.ComunitieIds.Split(new Char[] { ';' });

            var qCommunity_old = db.Questions_Comunities.Where(x => x.QuestionId == viewModel.questionId);

            db.Questions_Comunities.RemoveRange(qCommunity_old);

            for (int c = 0; c < communiyIds.Length; c++)
            {
                var qCommunity = new Questions_Comunities();
                qCommunity.QuestionId  = viewModel.questionId;
                qCommunity.ComunitieId = int.Parse(communiyIds[c]);
                qCommunity.AddingDate  = DateTime.Now;
                //fill question community into question
                Question.Questions_Comunities.Add(qCommunity);
            }

            //var comunityList = Question.Questions_Comunities.ToList();

            //if (communiyIds.Length > comunityList.Count)
            //{
            //    for (int i = 0; i < comunityList.Count; i++)
            //    {
            //        comunityList[i].ComunitieId = int.Parse(communiyIds[i]);
            //    }

            //    for (int i = comunityList.Count; i < communiyIds.Length; i++)
            //        comunityList.Add(new Questions_Comunities()
            //        { QuestionId = viewModel.questionId,
            //            ComunitieId =int.Parse(communiyIds[i]),
            //            AddingDate =DateTime.Now
            //        });
            //}
            //else
            //{

            //    for (int i = 0; i < communiyIds.Length; i++)
            //    {
            //        comunityList[i].ComunitieId = int.Parse(communiyIds[i]);
            //    }
            //    var deletedIDs = Question.Questions_Comunities.OrderByDescending(p => p.Id).Take(comunityList.Count - communiyIds.Length);
            //    foreach (var item in deletedIDs)
            //    {
            //        Question.Questions_Comunities.Remove(item);
            //    }

            //}

            //Question.Questions_Comunities = comunityList;

            //fill question answers
            string[]      aValues    = viewModel.answerValues.Split(new Char[] { ';' });
            List <string> answerImgs = ImageUpload(viewModel.answerImgs);
            var           oldOptions = Question.Question_Answer_Values.ToList();

            for (int a = 0; a < aValues.Length; a++)
            {
                oldOptions[a].AnswerValue = aValues[a];
                if (answerImgs[a] != null)
                {
                    oldOptions[a].PhotoUrl = answerImgs[a];
                }
                else
                {
                    oldOptions[a].PhotoUrl = null;
                }

                //fill question answers to question
                Question.Question_Answer_Values = oldOptions;
            }

            try
            {
                db.SaveChanges();

                return(true);
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    string err = string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                               eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        string errr = string.Format("- Property: \"{0}\", Error: \"{1}\"",
                                                    ve.PropertyName, ve.ErrorMessage);
                        throw new Exception(errr);
                    }
                }
                return(false);
            }
            catch (System.Data.Entity.Infrastructure.DbUpdateException e)
            {
                string err = e.Message;
                return(false);
            }
        }
        // POST: api/PostApi
        public bool Post(PostVM viewModel)
        {
            var user = db.AspNetUsers.Find(viewModel.UserId);
            // file Post info
            var Post_Info = new Post_Info();

            Post_Info.CreationDate = viewModel.CreationDate;
            Post_Info.EndDate      = viewModel.PostEndDate;
            Post_Info.UserId       = viewModel.UserId;
            Post_Info.AspNetUser   = user;

            // fill question info
            var Question = new Question();

            Question.PhotoUrl           = ImageUpload(viewModel.QPhotoFile).FirstOrDefault();
            Question.AnswerTypeId       = db.Answer_Types.Where(t => t.Type == viewModel.AnswerType).FirstOrDefault().Id;
            Question.QuesetionTitle     = viewModel.QuesetionTitle;
            Question.IsRequired         = viewModel.IsRequired;
            Question.EndDate            = viewModel.EndDate;
            Question.IsRankeditorChoice = viewModel.IsRankeditorChoice;



            //fill question answers
            string[]      aValues     = viewModel.answerValues.Split(new Char[] { ';' });
            var           answerImgs  = viewModel.answerImgs;
            List <string> optionsImgs = ImageUpload(answerImgs);

            for (int a = 0; a < aValues.Length; a++)
            {
                var answerValues = new Question_Answer_Values();
                answerValues.OptionNum   = a;
                answerValues.AnswerValue = aValues[a];
                if (optionsImgs.Count != 0 && optionsImgs.Count >= a)
                {
                    answerValues.PhotoUrl = optionsImgs[a];
                }

                //fill question answers to question
                Question.Question_Answer_Values.Add(answerValues);
            }

            //fill question community
            var qCommunity = new Questions_Comunities();

            if (!viewModel.ComunitieIds.Equals(16))
            {
                string[] communiyIds = viewModel.ComunitieIds.Split(new Char[] { ';' });
                for (int c = 0; c < communiyIds.Length; c++)
                {
                    qCommunity.ComunitieId = int.Parse(communiyIds[c]);
                    qCommunity.AddingDate  = DateTime.Now;
                    //fill question community into question
                }
            }
            else
            {
                qCommunity.ComunitieId = 16;
                qCommunity.AddingDate  = DateTime.Now;
                //fill question community into question
            }
            Question.Questions_Comunities.Add(qCommunity);



            //fill question into the post
            Post_Info.Questions.Add(Question);

            db.Post_Info.Add(Post_Info);
            try
            {
                db.SaveChanges();

                return(true);
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    string err = string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                               eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        string errr = string.Format("- Property: \"{0}\", Error: \"{1}\"",
                                                    ve.PropertyName, ve.ErrorMessage);
                        throw new Exception(errr);
                    }
                }
                return(false);
            }
            catch (System.Data.Entity.Infrastructure.DbUpdateException e)
            {
                string err = e.Message;
                return(false);
            }
        }