ciao Galeazzo
con ef puoi persistere le modifiche senza azzerare il context. In questo modo in caso di validazione post fallita puoi attraversare gli oggetti del context e ripristinare lo stato precedente.
Questo a grandi linee perche personalmente non ho mai avuto bisogno di addentrarmi piu di tanto in questo ramo di EF se non teoricamente quando l'ho dovuto imparare.
Potresti, nell'ambito di un metodo di una classe di business, fare qualcosa tipo:
codice:
//eseguo operazioni sul context. il context si popola di oggetti con relativo ObjectState
//persisto ma lascio che il context continui a tenere traccia dello stato degli oggetti attraverso l'objectStateManager.
ctx.SaveChanges(false);
//lancio le SP
if (esito == ok)
//ctx.AcceptAllChanges(); //azzero il context, tutti gli oggetti e i relativi stati vengono eliminati
else
//avvalendomi degli oggetti ancora presenti nel context (tracciati dall'objectstateManager) eseguo il rollback.
questo a grandi linee, ora la parte piu complessa è capire se o in che misura è fattibile l'operazione di rollback in casi complessi come i tuoi, per questo credo ci sia bisogno di studiare ef piu approfonditamente e testare.
P.S.
visto che devi riscrivere parte del software non si potrebbe pensare di spostare un po di logica prima della persistenza?