public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
}
//Oops~~~
context.SaveChanges();
}
[HttpPost]
public ActionResult Edit(Product product)
{
if (ModelState.IsValid)
{
repository.SaveProduct(product);
//I can see this msg int the view page. but database never changed.!!
TempData["message"] = string.Format("{0} has been saved", product.Name);
return RedirectToAction("Index");
}
else
{
// there is something wrong with the data values
return View(product);
}
}
我遇到了这个问题,不知道如何将数据存储到数据库中。当我尝试将更改保存到现有产品时,会出现此问题。 谁能告诉我为什么调用saveChanges()方法和数据从未保存到数据库? THX
答案 0 :(得分:1)
由模型绑定构造的实体product
不会自动附加到上下文。因此,上下文不知道保存的任何更改。您必须先附加产品并将其状态设置为已修改。
context.Products.Attach(product);
// When setting the entry state to Modified
// all the properties of the entity are marked as modified.
context.Entry(product).State = EntityState.Modified;
现在您可以致电context.SaveChanges();
。