当我尝试在Pro ASP.NET MVC3中完成SportStore演示时,为什么SaveChanges()无法工作?

时间:2012-06-07 01:56:11

标签: .net asp.net-mvc-3 entity-framework ef-code-first

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

1 个答案:

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