2016-09-23 4 views
2

개체를 로컬에서 수정 한 다음 DAL에 전달하여 연결된 데이터베이스에서 업데이트합니다.dbcontext SaveChanges를 사용하여 수정 된 레코드를 DB에 푸시하는 방법?

보통 저장 프로 시저를 사용하고 DB를 업데이트하기 위해 독자를 실행하지만이 프로젝트는 대신 DB 컨텍스트를 구현합니다.

그러나 변경 내용을 저장하는 메서드를 실행하면 오류없이 반환되며 데이터베이스에서 레코드가 업데이트되지 않습니다.

여기에서 검색을하면 this question이 나타나서 save를 호출하기 전에 수정 된 상태로 db 레코드를 표시 할 것을 제안했습니다. 어떤 문제를 해결하지 못했습니다.

질문 : 당신이 SaveChanges를을 dbcontext 사용하여 DB에 수정 기록을 밀어 수있는 방법

?

는 DAL 방법의 요지입니다 :

public void update_Release_Status(Status recordModified) 
{ 

      //Get the original record and update with the modified values. 

     Status recordOriginal = db3.Status .First(i => i.ID == recordModified.ID); 
     db3.Entry(recordOriginal).State = System.Data.Entity.EntityState.Modified; //marked as modified here before saving 
     recordOriginal = recordModified; 
     db3.SaveChanges(); 


} 
+0

'recordOriginal'인스턴스에서 아무 것도 변경하지 않았으므로 업데이트 할 것이 없습니다. 변수 참조를 완전히 바꾸지 않고'recordOriginal'에 개별 필드를 설정할 수 있습니까? 아니면'recordModified'를 원래 DB 컨텍스트에서 가져온 것이라면 컨텍스트에 첨부 할 수 있습니까? (그것은 어디에서 왔습니까?) – David

+0

이 해결책은 당신이나 당신을 위해 일하고 있습니까? http://stackoverflow.com/a/39663331/1077309 – Sampath

답변

4

귀하의 실체가이 db3.Entry(recordOriginal).State = System.Data.Entity.EntityState.Modified;

주처럼 할 할 필요가 없습니다 one.So connected (또는 tracked)입니다 : 들어오는 개체의 속성을 가져온 개체에 매핑해야합니다. 다음과 같이 Mapper API를 사용하거나 수동으로 수행 할 수 있습니다.

public void update_Release_Status(Status recordModified) 
{ 

    Status recordOriginal = db3.Status.First(i => i.ID == recordModified.ID); 

    recordOriginal.Name = recordModified.Name;//here you have to do the mapping 
    recordOriginal.Age=recordModified.Age; //just used fake property names :) 

    db3.SaveChanges(); 

} 
+0

정확히 같은 문제가 아니겠습니까? DB 컨텍스트에서 가져온 실제 객체는 수정되지 않습니다. 저장을 변경할 필요가 없습니다. – David

+0

이것은 자신의 메서드에서 오는'recordOriginal = recordModified;'부분을 수정하는 부분입니다. @ David – Sampath

+0

예,하지만'recordModified'는 DB 컨텍스트에 전혀 첨부되어 있지 않습니까? 경험되는 문제는 그렇지 않다는 것을 암시합니다. 그렇다면 왜 어쨌든 별도의 인스턴스를 가져 오는 이유는 무엇입니까? 기본적으로 DB 컨텍스트에서 객체를 가져온 다음 해당 객체에 대해 아무 것도하지 않습니다. 그럼 왜 그것을 가져 오지? 여기에 표시되는 전체 방법은 마지막 줄로 단순화 할 수 있습니다. – David