다른 테이블의 값을 기반으로 테이블에 데이터를 쓰는 저장 프로 시저가 있습니다. 따라서 테이블에서 시작/종료 날짜를 읽은 다음 많은 양의 데이터를 작성하고 별도의 테이블에 씁니다.엔터티 프레임 워크, 트랜잭션 및 저장 프로 시저
사용자가 시작/종료 날짜를 선택한 다음 시작/종료 날짜를 테이블에 저장합니다. 그런 다음 EF 내에서 저장 프로 시저를 호출하고 프로 시저가 방금 업데이트 된 테이블을 읽고 다른 테이블을 채 웁니다.
proc가 실패하면 proc이 쓴 데이터와 테이블의 초기 업데이트를 롤백하고 싶습니다.
'SaveChanges'를 호출하면 데이터가 테이블 (EF에서 완료된 초기 업데이트)에만 기록된다고 생각합니다. 그래서 저는 이것을 호출하고, 그 다음 절차를 호출합니다. 프로 시저가 실패했는지 여부를 감지하는 방법이 있습니까? 그렇다면 모든 udpates를 롤백하십시오 (테이블 업데이트 및 proc 한 모든 기능).
현재, 내 코드는 다음과 같습니다,하지만 SaveChanges를에 paremeter가 유효하지 않은 것 (매개 변수를 원하지 않는다), 그리고 'AcceptAllChanges은'잘못되었습니다using (var scope = new TransactionScope())
{
Context.SaveChanges(false);
Context.project_scheduled_event_payments(st.id);
Context.AcceptAllChanges();
}
감사 톰 우리는
DbContext
이ObjectContext
래퍼 알고, 그래서 우리는.SaveChanges(SaveOptions)
방법에 대한 액세스 권한을 얻기 위해IObjectContextAdapter
를 사용할 수 있습니다. EF5에서 사용할 수 있습니까? '비 식별 할 수있는'TransactionScope '문제가 발생합니다. – Craig@Craig 내 대답이 업데이트되었습니다. 참조가 누락되었다고 생각합니다. –
Thanks @Tom -하지만 이제 SaveChanges와 겨루고 있습니다. 부울 매개 변수를 원하지 않습니다. 제로 인수를 원합니다. 어쩌면 모든 문서가 "EF6 특정"이라고 말하는 것 같아서 EF6에 갈 필요가 있을까요? – Craig