2009-07-02 4 views
2

나는 디자인 문제에 대한 해결책을 찾고 있습니다. 이것은 약간 설명 할 것이다. 나는 코드를 게시 하겠지만, 그 woul은 이것을 더욱 길게 만든다.TransactionScope 및 롤백 개체 상태

필자는 필요에 따라 Business Objects를 보유하기 위해 사용하는 사용자 지정 제네릭 컬렉션을 보유하고 있습니다. 쉽게 참조 할 수 있도록 비즈니스 개체 BO 및 일반 컬렉션 을 호출하십시오. GC 내부에는 삭제 플래그가 지정된 비즈니스 개체의 개인 컬렉션이 있습니다. 이 개인 컬렉션 PDC으로 전화하십시오.

나는 자신의 PDC가있는 임의의 수의 GC를 언제든지 수집 할 수 있으며 컬렉션에없는 다른 BO도 가질 수 있습니다.

변경 사항을 저장할 때 모든 BO와 GC를 반복하고 각 변경 사항을 저장하게합니다. 이 문제는 TransactionScope에서 래핑 된 것이므로 올바르게 저장하지 못하면 데이터베이스가 롤백됩니다.

GC를 저장하면 PDC 상태에 문제가 있습니다. GC는 먼저 모든 BO에 업데이트를 저장 한 다음 PDC의 BO와 관련된 레코드를 삭제하고 은 모든 BO의 PDC를 지 웁니다. 나는 GC의 상태가 데이터베이스의 새로운 상태를 정확하게 반영하도록 이렇게한다.

이제 하나 이상의 GC가 성공적으로 저장된 후에 BO 또는 GC가 저장에 실패했다고 가정합니다. TransactionScope는 롤백을 수행합니다. 데이터베이스에서 삭제 된 레코드는 으로 복원되지만 PDC의 일부 또는 전체가 지워지고 상태 정보가으로 손실됩니다.

여기 나와있는 질문은 다음과 같습니다. 커밋이 발생할 때까지 PDC 정보를 유지하려면 어떻게해야합니까? 그런 다음 적절한 컬렉션이 지워지도록하십시오.

TransactionScope에는 변경 사항이 커밋되었을 때 알려주는 이벤트가 없습니다. 주어진 트랜잭션에 의해 영향을받는 잠재적 인 BO 및 GC가있을 수 있으므로 한 번에 하나의 GC를 처리하도록 트랜잭션을 제한 할 수 없습니다.

제안 사항?

답변

2

TransactionStarted는 트랜잭션 관리자에 의해 발생되고 TransactionCompleted는 트랜잭션 자체에 의해 발생합니다.

GC에 IEnlistmentNotification을 구현하는 것이 좋습니다. 당신을 도울 수있는 예가 있습니다.

DNR TV show 113114을 확인해야 할 수도 있습니다.

+0

이것은 완벽 해 보입니다. 링크도 가져 주셔서 감사합니다. 이것은 내 문제를 해결해야한다. –