TransactionScope e reverter o estado do objeto

Estou procurando uma solução para um problema de design. Isso vai demorar um pouco de explicar. Eu colocaria o código, mas isso tornaria isso ainda mais longo.

Eu tenho uma coleção genérica personalizada que uso para manter Business Objects conforme necessário. Para facilitar a referência, chame os objetos de negóciosBO e a coleção genéricaGC. Dentro do GC Eu tenho uma coleção particular dos objetos de negócios que foram marcados para exclusão. Ligue para esta coleção particularPDC.

Eu posso ter um número arbitrário de GC, cada um com seu próprio PDC, a qualquer momento, além de outros BOs que não estão em nenhuma coleção.

Quando eu salvo as alterações, faço um loop em todos os BO e GC e faço com que cada um salve suas alterações. Isso acontece envolto em um TransactionScope para que eu faça rollback das alterações do banco de dados se algo falhar em salvar corretamente.

Quando um GC salva, tenho um problema com o estado de seu PDC. O GC primeiro salva todos os BOs com atualizações e, em seguida, exclui os registros associados aos BOs no PDC,limpa o PDC de todos os BOs. Eu faço isso para que o estado do GC reflita corretamente o novo estado do banco de dados.

Agora, suponha que um BO ou GC não consiga salvar após um ou mais GC ter sido salvo com sucesso. O TransactionScope executa uma reversão. Os registros excluídos do banco de dados são restaurados,mas os alguns / todos os PDC foram limpos e que a informação do estado perdido.

Então, aqui está meu dilema: Como mantenho as informações do PDC até que o commit tenha ocorrido, então garanto que as coleções apropriadas estão limpas?

TransactionScope não tem nenhum evento que eu possa pegar para avisar quando as alterações foram confirmadas. Há potencialmente muitos BOs e GC afetados por qualquer transação, por isso não posso restringir a transação para lidar com um GC por vez.

Alguma sugestão?

questionAnswers(1)

yourAnswerToTheQuestion