Vroeger, het klinkt al lang geleden, maakten transacties onderdeel uit van Enterprise Services.
Om transactions te gebruiken in het .NET Framework 2.0 is het, net als in .NET 1.x, noodzakelijk om eerst een externe referentie te leggen naar een system assembly. In In het .NET Framework 2.0 is er echter een nieuwe assembly bijgekomen en wel de System.Transactions.dll. Binnen Microsoft wordt deze functionaliteit gezien als onderdeel van Indigo, en eigenlijk zien we hier dus de eerste Indigo functionaliteit verschijnen.
System.Transactions biedt nieuwe oplossingen voor het managen van transactions. Onderstaand code voorbeeld geeft aan hoe het werkt.
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOptions.RequiresNew))
{
//Delegation only works against Sql Server 2005,
//for this example to work this connection must point to one.
using (SqlConnection conn1 = new SqlConnection(_connectionStringYukon))
{
conn1.Open(); //The connection enlists, but does not promote
//do your work 1 here.
}
MessageBox.Show("Check your Transaction Statistics Active transactions here, then press enter");
//This connection can point to any Backend that supports DTC.
//Sql Server 7, 2000, 2005 or Oracle
using (SqlConnection conn2 = new SqlConnection(_connectionString2))
{ conn2.Open();
//The connection enlists, and automatically promotes the transaction.
//do your work 2 here.
if ( error == true )
{ System.Transactions.Transaction.Current.Rollback();
}
}
MessageBox.Show("Check your Transaction Statistics Active transactions here, then press enter");
// Set the scope to complete
transactionScope.Complete();
}
Het is niet meer nodig om te erven van ServicedComponent. Transacties kunnen hierdoor qua scope veel nauwkeuriger gemanaged worden. Wat verder bijzonder aan dit voorbeeld is, is dat de transactie ook nog ‘slim’ is. Op het moment dat ‘conn1.Open()’ wordt aangeroepen wordt wel een transactie gestart, maar de DTC nog niet geactiveerd; immers, dit is de eerste datasource die aangesproken wordt, dus er is nog geen sprake van een distributed transaction. Op het moment dat ‘conn2.Open()’ wordt uitgevoerd, is de transaction slim genoeg om te detecteren dat het hier om een andere datasource gaat, en wordt alsnog de DTC bijgeschakeld. Deze functionaliteit is momenteel (beta 1, CTP december) alleen beschikbaar voor Yukon (SQL Server 2005).