2011-10-02 7 views
0

.NET MVC (학습)을 처음 사용합니다. 나는 (이 깨끗한 코드가 아닙니다 내가 배우고)엔티티 프레임 워크의 모델을 수동으로 업데이트하는 방법

 [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를 가져오고, Product 카테고리를 업데이트 한 다음 Model을 데이터베이스로 업데이트합니다. 수동으로 변경된 카테고리를 제외하고 제품의 속성에 대한 모든 변경 사항이 저장됩니다.

실수가 있습니까?/나는 무엇인가 놓치고 있습니까? 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); 
    } 

당신이 Product 클래스

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

    //other properties 

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

감사에서 그것을 정의해야 CatagoryID 당신이 스칼라 속성이없는 경우. 제품 클래스에 이미 범주가 있습니다. 'Product.Category.ID = viewModel.CategotyID'를 사용하여 카테고리를 할당 할 수 있습니까? – RAM

+0

@RAM 작동하지 않습니다. 'Product' 클래스에서'CategoryID'에 할당해야합니다. – Eranga

+0

Eranga. 안녕하세요. 시험해 보겠습니다. – RAM

관련 문제