存储更新、插入或删除语句影响了意外的行数(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 });
}
请给我一些指导。谢谢!
您正在创建一个新的question
和question_ext
,并从传递的视图模型分配值。所以如果你试图保存更改,它将保存为新行,但在此之前,你指定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();
然后将值赋给question,并尝试用编辑模式保存