存储更新,插入或删除语句会影响意外的行数(0)。

时间:2015-05-17 03:20:01

标签: c# asp.net-mvc-4 razor

我对MVC很陌生。我从数据库中检索了值并在视图中显示它,我想进行更改并更新现有值。检索到的值没有问题,但是当我创建save时,它会在db.changes行返回错误:

  

存储更新,插入或删除语句会影响意外   行数(0)。自那以后,实体可能已被修改或删除   实体已加载。刷新ObjectStateManager条目。

我在Edit.cshtml中尝试了包含@ Html.HiddenFor(m => m.Question_ID)的所有内容,但仍然没有运气。

我的CreateQuestionViewModel:

public class CreateQuestionViewModel
    {
        [HiddenInput(DisplayValue = false)]
        public int Question_ID { get; set; }

        [HiddenInput(DisplayValue=false)]
        public int Survey_ID { get; set; }

        [DisplayName("Question Title")]
        public string Qext_Text { get; set; }

        [DisplayName("Question Type")]
        public string Question_Type { get; set; }

        public bool Mandatory { get; set; }

        public string Language { get; set; }
    }
}

我的编辑控制器:

  [HttpGet]
            public ActionResult Edit(int Question_ID = 0)
            {
                var viewModel = new CreateQuestionViewModel();
                viewModel.Question_ID = Question_ID;

                if (ModelState.IsValid)
                {
                    SURV_Question_Model surv_question_model = db.SURV_Question_Model.Find(Question_ID);
                    viewModel.Mandatory = surv_question_model.Question_Mandatory; 
                    viewModel.Question_Type = surv_question_model.Question_Type;

                    SURV_Question_Ext_Model surv_question_ext_model = db.SURV_Question_Ext_Model.FirstOrDefault(x => x.Qext_Question_ID.Equals(Question_ID));
                    viewModel.Qext_Text = surv_question_ext_model.Qext_Text;
                    viewModel.Language= surv_question_ext_model.Qext_Language;

                }
                return View(viewModel);
            }

        [HttpPost]
                public ActionResult Edit(CreateQuestionViewModel viewModel)
                {
                    if (ModelState.IsValid)
                    {
                        var question = new SURV_Question_Model();
                        question.Question_Mandatory = viewModel.Mandatory;
                        question.Question_Type = viewModel.Question_Type;

                        db.Entry(question).State = EntityState.Modified;
                        db.SaveChanges();

                        var question_ext = new SURV_Question_Ext_Model();
                        question_ext.Qext_Text = viewModel.Qext_Text;
                        question_ext.Qext_Language = viewModel.Language;

                        db.Entry(question_ext).State = EntityState.Modified;
                        db.SaveChanges();


                        return RedirectToAction("Edit", "SURV_Main", new { id = viewModel.Survey_ID });

                    }

请给我一些指导。 谢谢!

1 个答案:

答案 0 :(得分:5)

您正在创建新的questionquestion_ext,并从传递的viewmodel中分配值。因此,如果您尝试保存更改,它将保存为新行但在此之前您将entitystate指定为modified,以便系统无法修改。这就是错误即将发生的原因。  所以首先不要创建像这样的新创建并尝试

     var question = db.createviewquestionmodel.where
    (d=> d.question_id == viewmodel.question_id).firstordefault(); 

    question.Question_Mandatory = viewModel.Mandatory;
   question.Question_Type = viewModel.Question_Type;
   db.Entry(question).State = EntityState.Modified;
   db.SaveChanges();

然后将值分配给问题并尝试使用编辑模式保存