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

本文关键字:意外 影响 更新 插入 语句 删除 存储 | 更新日期: 2023-09-27 17:49:35

我对MVC很陌生。我从数据库中检索到的值,并显示在视图中,我想做的改变和更新现有的值。在检索值上没有问题,但是当我创建保存时,它会在数据库中返回错误。变化:

存储更新、插入或删除语句受意外影响行数(0)。实体可能被修改或删除实体被加载。刷新ObjectStateManager表项。

我已经尝试了包括@Html的一切。隐藏(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; }
    }
}

My Edit Controller:

  [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 });
                    }

请给我一些指导。谢谢!

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

您正在创建一个新的questionquestion_ext,并从传递的视图模型分配值。所以如果你试图保存更改,它将保存为新行,但在此之前,你指定entitystatemodified,所以系统不能修改。这就是误差产生的原因。因此,首先,不要创建新文件而是像这样输入

     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();

然后将值赋给question,并尝试用编辑模式保存