Ciao a tutti
Ho un problema con l'uso di TransactionScope.
Organizzo le classi in questo modo: supponiamo che voglia memorizzare un ordine ed eseguo queste operazioni
- salvataggio utente
- salvataggio ordine
Mi creo una classe per salvare l'utente e una classe per saltare l'ordine. La classe ordine richiama la funzione salva di utente nella sua funzione salva. Se vi verifica un errore nella fase di salvataggio voglio eseguire il rollback. Ho inserito un TransacrionScope in entrambe le funzioni Salva perchè la funzione Salva di utente viene richiamata anche in altre parti del progetto.
L'avere 2 TransactionScope annidati spesso mi da errore. Mi segnala che TransacrionScope è già utilizzato.
Suggerimenti su come evitare questo? Alternative a questa organizzazione o all'uso di TransactionScope?
Grazie mille
classe utente
public bool Salva()
{
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
transactionOptions.Timeout = new TimeSpan(0, 5, 0);
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{
bool result = Database.SalvaUtente();
if (result)
scope.Complete();
else
scope.Dispose();
return result;
}
}
classe ordini
public bool Salva()
{
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
transactionOptions.Timeout = new TimeSpan(0, 5, 0);
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{
bool result = utente.Salva();
result &= Database.SalvaOrdine();
if (result)
scope.Complete();
else
scope.Dispose();
return result;
}
}