如何在实体框架中手动更新模型

时间:2011-10-02 22:15:58

标签: asp.net-mvc entity-framework

我是.NET MVC(学习)的新手。我在Controller中有以下方法(这不是干净的代码,我正在学习)

        [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);
        }

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

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

1 个答案:

答案 0 :(得分: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; }
}