1

MVC 조치 메소드는 기본 모델 바인더가 양식 콜렉션 데이터에서 작성하는 엔티티 오브젝트 (페이지)를 수신합니다. 예를 들어 "CreateDate"을 보내지 않고 기본 모델 바인더에서이 속성을 필자가 필요로하지 않는 기본값으로 설정하는 등 일부 필드는 서버에 대한 요청에서 전송되지 않았기 때문에 잘못되었거나 null입니다.EF4로 엔티티의 단일 특성을 추적하지 않습니다.

일단 개체가 연결되면 당연히 모든 값 (유효하지 않은 값/필요하지 않은 값을 포함하여 데이터베이스에 유지됨)을 유지하려고 시도합니다. 나는 물론 속성별로 수동으로 할당 할 수 있지만,이 지속되지 않도록 EntityState로 설정하면 어쩌면 내가 속성을 플래그 어떻게 든 할 수 있는지 궁금 해서요()가 호출 ..

public ActionResult SomeMethod(Page page) 
{ 
page.ModifyDate = DateTime.Now; 

     _db.NewsPages.Attach(page); 
       _db.ObjectStateManager.ChangeObjectState(page, System.Data.EntityState.Modified); 
       _db.SaveChanges(); 
       _db.Dispose(); 

} 
+0

왜 당신이보기 모델을 사용하지 않는가? 제대로 설계된 응용 프로그램 컨트롤러에서 작업은 도메인 모델이 아닌보기 모델을 인수로 취해야합니다. 그런 다음 뷰 모델을 도메인 모델에 매핑하고 유지합니다. –

답변

0

올바른 수정 SaveChanges를 방법은 뷰 모델에 대해 다른 클래스를 사용하고 컨텍스트에 빈 엔티티를 연결하고 속성에 실제 값을 할당합니다 (또는 AutoMapper가이 시나리오를 처리하도록 함). @Darin은 주석에 제안했습니다. 당신은 당신의 길을 갈려면

당신은 POCO 엔티티의 상태를 변경하지 않아야하지만 당신은 모든 변경 재산의 상태를 변경해야합니다

public ActionResult SomeMethod(Page page) 
{ 
    page.ModifyDate = DateTime.Now; 

    _db.NewsPages.Attach(page); 
    ObjectStateEntry entry = _db.ObjectStateManager.GetObjectStateEntry(page); 
    entry.SetModifiedProperty("ChangedPropertyName"); 
    // Do the same for all other changed properties 
    _db.SaveChanges(); 
    _db.Dispose(); 
} 
관련 문제