2013-07-10 5 views
0

내 시나리오에서는 대개 내 데이터베이스 저장 영속을 PersistChangeSet 재정의에 저장합니다. 내 저장 프로 시저 래퍼를보다 쉽게 ​​동기화 할 수 있기 때문입니다. 다른 엔티티의 ID를 참조하는 엔티티와 관련된 호출입니다 (예를 들어 다른 엔티티 B에서 -1의 임시 ID를 참조하는 엔티티 A가있는 경우 먼저 엔티티 B를 저장 한 다음 엔티티에서 ID 참조를 업데이트 할 수 있기를 원합니다. 엔티티 B에 대해 데이터베이스에서 반환 된 ID가있는 A).Silverlight/RIA에서 PersistChangeSet이 실패 할 때 전체 ChangeSet의 롤백을 방지하는 방법

하나 개의 저장 프로 시저가 어떤 이유에서 오류를 반환

, 난 그냥 저장 프로 시저에 의해 반환 된 메시지와 함께 사용자 지정 예외를 던져합니다 (SubmitOperation에게보기를 클라이언트 측에서 객체의 HasError오류 특성을 활용 모델)을 사용하여 무엇이 잘못되었는지 사용자에게 알립니다.

난 그냥 설명하는 접근 방식 데 문제

는 지속성 오류 (즉 저장 프로 시저 래퍼 호출) 성공 2 3 "지속성 작업"에서,도 말, 경우, 전체 변경 집합을 롤백 것입니다. 예를 들어, 클라이언트 측 엔티티에 대해 -1의 임시 ID를 설정 한 다음에 PersistChangeSet 데이터베이스에 성공적으로 저장 한 후 해당 ID를 새 값으로 업데이트했습니다. SubmitChanges id가 -1로 되돌아 오는 콜백 (어떤 다른 엔티티가 PersistChangeSet에 저장하지 못했기 때문에). 이상적으로, 성공적으로 지속 된 엔티티는 SubmitChanges가 완료 될 때까지 ChangeSet에서 제거되어야합니다.

나는 내 문제를 충분히 잘 설명했으면 좋겠다. 위에 설명 된 접근 방식이 이상적이지 않거나 RIA의 지배 원칙을 위반하는 경우 제안을받을 수 있습니다.

미리 도움 주셔서 감사합니다.

답변

0

내 도메인 서비스에서 Submit 메서드를 재정의하여 TransactionScope를 사용하여이 문제를 해결했습니다. 이를 통해 PersistChangeSet은 작업 단위로 작동합니다 (즉, 모든 작업이 성공적으로 수행 된 경우에만 변경 사항이 유지됩니다).

여기에 세부 사항 : http://msdn.microsoft.com/en-us/library/ee707364(v=vs.91).aspx