2011-10-02 69 views
0

我是.NET MVC(Learning)的新手。我在控制器下面的方法(这是不干净的代码和我学习)如何在实体框架中手动更新模型

 [HttpPost] 
     public ActionResult Edit(ProductCategoryLocation viewModel) 
     { 
      if (ModelState.IsValid) 
      { 
       var product = viewModel.Product; 
       product.Category = db.Categories 
        .Where(c => c.ID == viewModel.CategoryID).Single();         
       db.Entry(product).State = EntityState.Modified;    
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      return View(viewModel); 
     } 

视图模型拥有产品,位置和类别类型和类别ID和LocationID。在POST方法中,我从View Model中获取类别ID,更新产品的类别,然后将模型更新到数据库。除手动更改的类别外,对产品属性的任何更改都会保存。

有没有错误/我错过了什么? 这是使用View Model进行更新的正确方法吗?

回答

0

您可以直接将视图模型的CategoryID分配给产品的CategoryID。这样您就不必从数据库中检索类别。

[HttpPost] 
    public ActionResult Edit(ProductCategoryLocation viewModel) 
    { 
     if (ModelState.IsValid) 
     { 
      var product = viewModel.Product; 
      product.CategoryID = viewModel.CategoryID;         
      db.Entry(product).State = EntityState.Modified;    
      db.SaveChanges(); 

      return RedirectToAction("Index"); 
     } 

     return View(viewModel); 
    } 

如果没有一个标量属性CatagoryID你在Product

public class Product 
{ 
    public int ID { get; set; } 

    //other properties 

    public int CategoryID { get; set; } 
    public virtual Category Category { get; set; } 
} 
+0

感谢定义它。产品类已经有类别。我可以使用“Product.Category.ID = viewModel.CategotyID”来分配类别吗? – RAM

+0

@RAM这是行不通的。您需要在'Product'类中指定'CategoryID'。 – Eranga

+0

嗨Eranga ..谢谢我会测试这个。 – RAM