LLBLGen - TransactionScope o DataAccessAdapter.StartTransaction
-
03-07-2019 - |
Domanda
Vedo che ci sono due opzioni principali per la gestione delle transazioni con llblgen.
Metodo 1:
using(DataAccessAdapter adapter = new DataAccessAdapter())
{
adapter.StartTransaction(IsolationLevel.ReadCommitted, "TR");
try
{
// ...
adapter.Commit();
}
catch
{
adapter.Rollback();
throw;
}
}
Metodo 2:
using(TransactionScope scope = new TransactionScope())
{
// ...
scope.Complete();
}
Qual è il tuo metodo preferito e perché? (Sto usando adapter / 2.6 .net / 3.5)
Soluzione
Vorrei utilizzare TransactionScope per la gestione delle transazioni in quanto è stato progettato per questo mentre DataAccessAdapter, mentre ha la capacità di creare transazioni, è progettato principalmente per DataAccess.
Per cercare di essere un po 'più chiari, è possibile utilizzare TransactionScope per gestire più transazioni tra più DataAccessAdapters mentre un singolo DataAccessAdapter sembra avere un ambito specifico.
Ad esempio:
using(TransactionScope ts = new TransactionScope())
{
using(DataAccessAdapter d1 = new DataAccessAdapter())
{
//do some data access stuff
}
using(DataAccessAdapter d2 = new DataAccessAdapter())
{
//do some other data access stuff
}
ts.complete();
}
Un'altra nota a margine è che TransactionScope è thread-safe, mentre DataAdapters non lo è.