public virtual TEntity Update(TEntity obj)
        {
            var entry = Ctx.Entry(obj);

            DbSet.Attach(obj);
            entry.State = EntityState.Modified;

            return(obj);
        }
        /// <summary>
        /// Assign all the non assigned ideas to different users
        /// </summary>
        public void AssignIdeas()
        {
            var context           = new EvaluationContext();
            var users             = context.Users.OrderBy(x => x.Id).ToList();
            var ideas             = context.Ideas;
            var mappedEvaluations = context.IdeaEvaluationMapping;
            int userCount         = 0;

            List <IdeaEvaluationMapping> objectToPost = new List <IdeaEvaluationMapping>();
            //Check for ideas which are yet to be assigned
            var activeIdeaCount  = ideas.Where(x => x.Assigned == false).OrderByDescending(x => x.Id).ToList();
            int totalEvaluations = 0;

            if (activeIdeaCount.Count() > 0)
            {
                totalEvaluations = activeIdeaCount.Count * 3;
            }

            List <int> tempEvaluatorIds = new List <int>();

            foreach (Idea _idea in activeIdeaCount)
            {
                List <int> evaluatorIds = new List <int>();
                int        flagCount    = 0;
                var        tempUsers    = users;
                foreach (IdeaEvaluationMapping _eval in mappedEvaluations)
                {
                    if (_eval.IdeaId == _idea.Id)
                    {
                        flagCount = flagCount + 1;
                        evaluatorIds.Add(_eval.EvaluationId);
                    }
                }
                if (flagCount < 3)
                {
                    for (int i = flagCount; i < 3; i++)
                    {
                        foreach (var userid in evaluatorIds)
                        {
                            var itemToRemove = tempUsers.FirstOrDefault(r => r.Id == userid);
                            tempUsers.Remove(itemToRemove);
                        }

                        if (userCount == tempUsers.Count())
                        {
                            userCount = 0;
                        }

                        objectToPost.Add(new IdeaEvaluationMapping {
                            IdeaId = _idea.Id, EvaluationId = tempUsers.Skip(userCount).FirstOrDefault().Id
                        });
                        userCount++;
                    }
                    //update idea assigned value to true

                    var local = context.Set <Idea>()
                                .Local
                                .FirstOrDefault(entry => entry.Id.Equals(_idea.Id));

                    // check if local is not null
                    if (local != null)
                    {
                        // detach
                        context.Entry(local).State = EntityState.Detached;
                    }
                    // set Modified flag in your entry
                    Idea ideaToUpdate = new Idea();
                    ideaToUpdate.Assigned             = true;
                    ideaToUpdate.Id                   = _idea.Id;
                    context.Entry(ideaToUpdate).State = EntityState.Modified;


                    //context.Update(ideaToUpdate);
                    context.Entry(ideaToUpdate).Property(x => x.Id).IsModified          = false;
                    context.Entry(ideaToUpdate).Property(x => x.Name).IsModified        = false;
                    context.Entry(ideaToUpdate).Property(x => x.Description).IsModified = false;
                    context.Entry(ideaToUpdate).Property(x => x.Assigned).IsModified    = true;
                    context.SaveChanges();
                }
            }
            var finalObject = objectToPost;

            if (finalObject.Count() > 0)
            {
                context.IdeaEvaluationMapping.AddRange(finalObject);
            }

            //Save changes to db
            context.SaveChanges();
        }