Io non so se sia dovuto a delle incompatibilità note, ma non a me :), se sia un problema della mia configuarazione che non riesco a capire, o qualsiasi altra cosa, ma quando uso il TransactionScope con EntityFramework ottengo sempre una eccezione con questo messaggio.
System.Data.EntityException: The underlying provider failed on EnlistTransaction
La mia configurazione attuale prevede due Windows Server 2003 sp2 uno con l'Application Server e l'altro col DB Sql Server 2005 entrambi col DTC attivato e con privilegi di accesso alla rete.
Non ho approfondito ulteriormente la situazione perchè comunque questa eccezione mi ha fatto capire che usando il TrasactionScope ogni nuova connessione aperta, anche se riferita alla stessa connessione, viene auto-promossa a distribuita e nella mia situazione non voglio che questo accada, non avendo, almeno per ora, necessità di transazioni distribuite.
Entity Framework apre e chiude una connessione ogni volta che ne ha bisogno. Se si avesse la necessità di usare un TransactionScope, per qualsiasi motivio, ma non si vuole la promozione delle transazioni a distribuite, è sufficiente gestire manualmente l'aprtura della connessione al DB; ovvero si dovrà aprire la connessione all'inizio dello scope di transazione ed utilizzare sempre quella per tutte le operazioni, per chiuderla solo alla fine.
using(TransactionScope ts = new TransactionScope())
{
connection.Open();
//do operations
//...
//...
ts.Complete();
connection.Close();
}
Matteo