TransactionScope errore

lunedì 15 dicembre 2014 - 18.23
Tag Elenco Tags  C#  |  .NET 4.0

svipla Profilo | Senior Member

Ciao a tutti
Ho questo codice:
using (TransactionScope scope = new TransactionScope()) { try { MembershipUser member = Membership.GetUser(userId); if (member != null) { Users.eliminaAmministratore(userId); Membership.DeleteUser(member.UserName); } scope.Complete(); return true; } catch (Exception ex) { scope.Dispose(); return false; } }

Dove Users.eliminaAmministratore:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ricevo errore quando esegue 'Users.eliminaAmministratore' e va al catch del primo blocco di codice:

Il valore IsolationLevel della transazione specificata per TransactionScope è diverso dal valore richiesto per l'ambito.
Nome parametro: transactionOptions.IsolationLevel

Il valore IsolationLevel della transazione specificata per TransactionScope è diverso dal valore richiesto per l'ambito.\r\nNome parametro: transactionOptions.IsolationLevel

Grazie mille

alx_81 Profilo | Guru

>Ciao a tutti
ciao

>Il valore IsolationLevel della transazione specificata per TransactionScope
>è diverso dal valore richiesto per l'ambito. Nome parametro: transactionOptions.IsolationLevel
Il fatto che tu apra un transaction scope fuori ti consente di passare le opzioni di transazione primadella prima using.
In questo modo puoi toglierlo dal metodo interno "eliminaAmministratore" e usare quello più esterno, il che è anche più pulito e leggibile.

>Grazie mille
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

svipla Profilo | Senior Member

Scusami, ma non ho capito

alx_81 Profilo | Guru

non mettere un altro TransactionScope in eliminaAmministratore..
C'è già esterno (chiamante di quel metodo).
E le transactionOption, mettile nel TransactionScope esterno.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

svipla Profilo | Senior Member

ok, ho capito.
Uso 2 Transaction perchè i 2 metodi fanno parte di 2 classi differenti e capita di richiamare Users.eliminaAmministratore o in altri metodi di altre classi o singolarmente in una pagina .aspx

Mi spiego meglio: ho 2 classi cliente e ordine. Posso richiamare il metodo salva di cliente o nella pagina che mi permette di registrare un cliente o nel metodo per salvare un 'ordine. Dato che il salvataggio del cliente esegue diverse operazioni sul db, appena si verifica un errore deve eseguire un un rollback. Stessa cosa nel metodo salva: se il salvataggio del cliente non da errori, ma l'esecuzione del codice successivo da errore, devo eseguire un rollback anche su cliente.

alx_81 Profilo | Guru

>Uso 2 Transaction perchè i 2 metodi fanno parte di 2 classi differenti
>e capita di richiamare Users.eliminaAmministratore o in altri
>metodi di altre classi o singolarmente in una pagina .aspx
>Mi spiego meglio: ho 2 classi cliente e ordine. Posso richiamare
>il metodo salva di cliente o nella pagina che mi permette di
>registrare un cliente o nel metodo per salvare un 'ordine. Dato
>che il salvataggio del cliente esegue diverse operazioni sul
>db, appena si verifica un errore deve eseguire un un rollback.
>Stessa cosa nel metodo salva: se il salvataggio del cliente non
>da errori, ma l'esecuzione del codice successivo da errore, devo
>eseguire un rollback anche su cliente.
certo ma allora crea un "orchestratore" che chiama i metodi come ti servono, e solo quella classe di orchestrazione usa i transactionScope.

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5