3
這裏是我的控制器代碼:我可以創造一個實體,但我不能編輯一個
[HttpPost]
public ActionResult Edit(ProductViewModel viewModel)
{
Product product = _ProductsRepository.GetProduct(viewModel.ProductId);
TryUpdateModel(product);
if (ModelState.IsValid)
{
_productsRepository.SaveProduct(product);
TempData["message"] = product.Name + " has been saved.";
return RedirectToAction("Index");
}
return View(viewModel); // validation error, so redisplay same view
}
[HttpPost]
public ActionResult Create(CommodityCategoryViewModel viewModel)
{
Product product = new Product();
TryUpdateModel(product);
if (ModelState.IsValid)
{
_productsRepository.SaveProduct(product);
TempData["message"] = product.Name + " has been saved.";
return RedirectToAction("Index");
}
return View(viewModel); // validation error, so redisplay same view
}
他們都調用保存()函數,定義如下:
public class ProductsRepository
{
private readonly MyDBEntities _entities;
public ProductsRepository()
{
_entities = new MyDBEntities();
}
public void SaveProduct(Product product)
{
// If it's a new product, just attach it to the DataContext
if (product.ProductID == 0)
_entities.Products.Context.AddObject("Products", product);
else if (product.EntityState == EntityState.Detached)
{
// We're updating an existing product, but it's not attached to this data context, so attach it and detect the changes
_entities.Products.Context.Attach(product);
_entities.Products.Context.Refresh(System.Data.Objects.RefreshMode.ClientWins, product);
}
_entities.Products.Context.SaveChanges(); // Edit function hits here
}
}
當我打電話創建,它會在SaveProduct()函數中命中AddObject(),並正確保存產品。
當我調用Edit時,它只會在SaveProduct()函數中碰到_entities.Products.Context.SaveChanges(),並且不會保存產品。
我在做什麼錯?
爲什麼不使用_entities.SaveChanges();代替?而且你最好使用這種模式:使用(var context = new MyDBEntities()){...}來訪問數據。 – zsong 2011-05-31 00:39:17
由於您的視圖模型(ProductViewModel)與您的實體(產品)不同,您的產品對象可能不處於修改狀態。嘗試檢查已更改的實體'context.ChangeTracker.Entries()' – Eranga 2011-05-31 01:27:35
@Eranga - EntityState已修改。我需要做什麼改變我的代碼? – Steven 2011-05-31 04:28:15