Entity Framework, Commit/RollBack e Transazioni

Merita un appunto questo pezzo di codice, che serve a gestire transazioni annidate.

Vi capita di vedere questi messaggi ?

“New transaction is not allowed because there are other threads running in the session.”

 

Questo succede sempre all’interno di cicli (for, while, etc.)

Allora probabilmente dovete spezzare la logica dei vostri loop di aggiornamento dati
(spesso e’ sufficiente portare il comando SaveChanges() fuori dal ciclo di loop)

oppure usare le transazioni :

 

public TransactionScope CreateTransactionScope()
{
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted;
transactionOptions.Timeout = TimeSpan.MaxValue;

return new TransactionScope(TransactionScopeOption.Required, transactionOptions);
}

using (TransactionScope scope = new TransactionScope())
{

context1.SaveChanges(SaveOptions.DetectChangesBeforeSave);


context2.SaveChanges(SaveOptions.DetectChangesBeforeSave);


scope.Complete();


context1.AcceptAllChanges();
context2.AcceptAllChanges();
}

(articolo originale : http://www.luisrocha.net/)

Happy Coding !

Potrebbe interessanti anche…

Disattivare telemetria windows 10

Uno dei servizi che oggigiorno rallentano maggiormente i sistemi windows10 e' il sistema di misura di telemetria, che...

Network CIDR Notation

Many firewalls and network devices use CIDR (Classless Inter-Domain Routing) notation rather than the common subnet...