TransactionScope und Rollback des Objektstatus
Ich suche nach einer Lösung für ein Designproblem. Dies bedarf einiger Erläuterungen. Ich würde Postleitzahl, aber das wird dies noch länger machen.
Ich verwende eine benutzerdefinierte generische Sammlung, um Business Objects nach Bedarf zu speichern. Rufen Sie zum leichteren Nachschlagen die Geschäftsobjekte aufBO und die generische SammlungGC. Innerhalb von GC habe ich eine private Sammlung der Geschäftsobjekte, die zum Löschen markiert wurden. Nennen Sie diese PrivatsammlungPDC.
Ich kann eine beliebige Anzahl von GCs haben, die jeweils ihre eigene PDC haben, sowie andere BOs, die sich nicht in einer Sammlung befinden.
Wenn ich Änderungen speichere, durchlaufe ich alle BOs und GCs und lasse sie jeweils speichern. Dies geschieht in einem TransactionScope, sodass ich Datenbankänderungen rückgängig mache, wenn etwas nicht ordnungsgemäß gespeichert werden kann.
Wenn ein GC speichert, habe ich ein Problem mit dem Status seines PDC. Der GC speichert zuerst alle BOs mit Aktualisierungen und löscht dann die Datensätze, die den BOs im PDC zugeordnet sindLöscht die PDC aller BOs. Ich tue dies, damit der Status des GC den neuen Status der Datenbank korrekt widerspiegelt.
Angenommen, ein BO oder GC kann nicht gespeichert werden, nachdem einer oder mehrere GCs erfolgreich gespeichert wurden. Der TransactionScope führt ein Rollback durch. Die aus der Datenbank gelöschten Datensätze werden wiederhergestellt.Aber einige / alle der PDCs wurden gelöscht und diese Statusinformationen gingen verloren.
Hier ist mein Problem: Wie bewahre ich die PDC-Informationen auf, bis das Commit durchgeführt wurde, und garantiere dann, dass die entsprechenden Sammlungen gelöscht werden?
TransactionScope hat kein Ereignis, das ich abfangen kann, um mich zu informieren, wenn die Änderungen festgeschrieben wurden. Es gibt möglicherweise VIELE BOs und GCs, die von einer bestimmten Transaktion betroffen sind. Daher kann ich die Transaktion nicht auf jeweils einen GC beschränken.
Irgendwelche Vorschläge?