2012-12-10 2 views
0

EF codefirst로 asp.net mvc에서 작업 중입니다. 한 번에 레코드 목록을 업데이트하려고합니다. like,ef codefirst 모델에서 이전 변경 사항을 롤백하는 방법

foreach(var pat in listpats) 
{ 
context.Entry<Patient>(pat).state=EntityState.Modified; 
context.savechanges(); 
} 

그리고 나를 위해 잘 작동합니다. 이제 listpats 10 항목을 포함하는 경우, 나는 업데이 트하는 동안 7 항목에서 예외가 있다고 가정 해. 처음 6 개 항목을 저장합니다. 하지만 업데이 트하는 동안 오류가 발생하지 않았 으면 한 번에 모든 레코드를 저장하고 싶습니다. 오류가 발생하면 모든 이전 변경 사항을 롤백해야합니다. 그래서 어떻게 EF 코드를 사용하여 첫 번째 모델을 얻을 수 있습니다. 제발 나를 안내 해줘.

foreach(var pat in listpats) 
{ 
    context.Entry<Patient>(pat).state=EntityState.Modified; 
} 

context.SaveChanges(); 

예외가 당신이 그들의 상태는 몇 가지 다른 코드에서 엔티티를 수정 한 경우 모든 것을 다시

답변

0

당신은 foreach는 외부 SaveChanges를()를 호출한다 foreach 루프 및 context.Entry (pat) .state = EntityState.Modified를 사용하여 명시 적으로 변경하지 않고도 (동일한 컨텍스트 내에서) 수정할 수 있습니다.

모든 환자 엔티티를 수정 한 후에 한 단계 뒤로 이동하면 context.SaveChanges()를 한 번 호출하면 자동으로 오류가 롤백됩니다.

SOOOO는 DB, 컨텍스트 (상태 변화는 엔티티를 수정할 때 발생) 수정 된 상태가 EF의 전달 될 모든 엔티티를 만들 것이다) (context.SaveChanges를 호출 이후 모든 환자 엔티티를 변경하고, 요약하기 .SaveChanges()는 롤백과 관련하여 이와 같은 간단한 경우를 처리합니다.

P. 귀하의 질문은 당신이 다른 상황에서 환자를 변경했는지 궁금하게 만들고 있습니다. 그래서 당신이 수동으로 현재 상황을 변경하는 것입니다.

0

을 롤백됩니다 발생하는 경우이 방법 :

관련 문제