2013-04-11 2 views
1

MVC 응용 프로그램에서 작업하고 데이터베이스 연결에 Entity Framework 4.0을 사용합니다. 편집 레코드를 테이블의 일부 필드를 업데이트하려고합니다. 편집에 대한 코드가 난 그냥이 필드를 업데이트 할EF 4.0에서 단일 값 업데이트

[HttpPost] 
    public ActionResult Edit(ProjectActivityDetail projectactivitydetail, FormCollection formcollection) 
    { 
     if (ModelState.IsValid) 
     { 
      string value = Request["ChkIntBool"]; 
      if (value.Substring(0, 4) == "true") { projectactivitydetail.IsApproved = 1; } else { projectactivitydetail.IsApproved = 0; } 
      projectactivitydetail.ProjectActivityDID = long.Parse(Session["ProjectActivityDID"].ToString()); 
      projectactivitydetail.UpatedBy = long.Parse(Session["UserID"].ToString()); 
      projectactivitydetail.UpdatedON = System.DateTime.Now; 
      db.Entry(projectactivitydetail).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     ViewBag.FK_ProjectActivityID = new SelectList(db.ProjectActivityMasters, "ProjectActivityID", "ActivityName", projectactivitydetail.FK_ProjectActivityID); 
     return View(projectactivitydetail); 
    } 

하지만이 null로 업데이트 내 다른 필드를 executred 때, 그것이 및 데이터베이스 테이블이 많은 값을 업데이트 할 때 내가 그 가치를 유지할 수있는 방법이있다. 도와주세요

+0

코드를 디버깅 할 때 개체에 null이 아닌 값이 포함되어 있습니까 (예 : 개체가 메서드로 전달되었을 때)? – IronMan84

답변

0

서비스 호출로 전달되는 엔티티가 완료되지 않은 것처럼 보입니다. 내 조언은 오히려 전달 된 하나를 부착보다 그 변경 사항을 기존 개체를 찾아 수 있도록하는 것입니다 :

[HttpPost] 
public ActionResult Edit(ProjectActivityDetail projectactivitydetail, FormCollection formcollection) 
{ 
    if (ModelState.IsValid) 
    { 
     //I'm assuming the PK of the entity is id so adjust for that 
     var entity = db.Set<ProjectActivityDetail>().Find(projectactivitydetail.id); 
     string value = Request["ChkIntBool"]; 
     entity.IsApproved = value.Substring(0, 4) == "true" ? 1 : 0; 
     entity.ProjectActivityDID = long.Parse(Session["ProjectActivityDID"].ToString()); 
     entity.UpatedBy = long.Parse(Session["UserID"].ToString()); 
     entity.UpdatedON = System.DateTime.Now; 
     db.Entry(entity).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    ViewBag.FK_ProjectActivityID = new SelectList(db.ProjectActivityMasters, "ProjectActivityID", "ActivityName", projectactivitydetail.FK_ProjectActivityID); 
    return View(projectactivitydetail); 
} 
0

예, 방법이있다. 이 경우 ProjectActivityDetail과 같이 모델에서 유지하려는 데이터로 숨겨진 필드를 추가하면 모델 바인딩 단계에서 변수가 projectactivitydetail 변수에 바인딩됩니다.

것은 당신이 null로 설정되는 CreatedOn라는 속성이 가정,보기에 추가 것 : 당신이 CreatedOn에 값을 원래 양식을 제출할 때

@Html.HiddenFor(model => model.CreatedOn) 

를 그런 다음에 바인딩됩니다 재산은 projectactivitydetail이고 귀하의 모델은 잘 저장됩니다. 모델 바인딩에서 값을 찾을 수 없으므로 필드가 null로 업데이트됩니다.

행운을 빈다.

관련 문제