Supporto delle transazioni
LINQ to SQL supporta tre modelli di transazione distinti. Di seguito sono elencati tali modelli nell'ordine di esecuzione dei controlli.
Transazione locale esplicita
Quando si chiama SubmitChanges, se la proprietà Transaction è impostata su una transazione (IDbTransaction
), la chiamata SubmitChanges viene eseguita nel contesto della stessa transazione.
È compito del programmatore eseguire il commit o il rollback della transazione dopo che ne è stata completata l'esecuzione. La connessione corrispondente alla transazione deve essere la stessa usata per costruire DataContext. Se si usa una connessione diversa, viene generata un'eccezione.
Transazione distribuibile esplicita
È possibile chiamare le API LINQ to SQL (incluso, solo a titolo di esempio, il metodo SubmitChanges) nell'ambito di una Transaction attiva. LINQ to SQL rileva che la chiamata si trova nell'ambito di una transazione e non ne crea una nuova. Inoltre, in questo caso, LINQ to SQL non chiude la connessione. Nel contesto di tale transazione è possibile eseguire query ed esecuzioni di SubmitChanges.
Transazione implicita
Quando si chiama SubmitChanges, LINQ to SQL controlla se la chiamata si trova nell'ambito di una Transaction o se la proprietà Transaction
(IDbTransaction
) è impostata su una transazione locale avviata dall'utente. Se non trova alcuna transazione, LINQ to SQL avvia una transazione locale (IDbTransaction
) e la usa per eseguire i comandi SQL generati. Dopo aver completato correttamente l'esecuzione di tutti i comandi SQL, LINQ to SQL esegue il commit della transazione locale e restituisce il controllo.