1
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

4

1 に答える 1

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

于 2012-06-07T05:31:02.490 に答える