Prise en charge des transactions
LINQ to SQL prend en charge trois modèles de transaction distincts. Ces modèles sont présentés ci-dessous dans l'ordre d'exécution des contrôles.
Transaction locale explicite
Lorsque vous appelez SubmitChanges, si la propriété Transaction a pour valeur une transaction (IDbTransaction
), l'appel de SubmitChanges est effectué dans le contexte de la même transaction.
Il vous appartient de valider ou de restaurer la transaction une fois qu’elle s’est correctement exécutée. La connexion qui correspond à la transaction doit être identique à celle utilisée pour construire le DataContext. L'utilisation d'une autre connexion lève une exception.
Transaction distribuable explicite
Vous pouvez appeler des API LINQ to SQL (y compris, mais de manière non limitative, SubmitChanges) dans l’étendue d’un type Transaction actif. LINQ to SQL détecte que l’appel est dans l’étendue d’une transaction et ne crée pas de transaction. LINQ to SQL évite également de fermer la connexion dans ce cas. Vous pouvez effectuer une requête et exécuter SubmitChanges dans le contexte de ce type de transaction.
Transaction implicite
Quand vous appelez SubmitChanges, LINQ to SQL vérifie si l’appel se trouve dans la portée d’une Transaction ou si la propriété Transaction
(IDbTransaction
) a pour valeur une transaction locale démarrée par l’utilisateur. S’il ne détecte aucune transaction, LINQ to SQL démarre une transaction locale (IDbTransaction
) et l’utilise pour exécuter les commandes SQL générées. Quand toutes les commandes SQL ont été exécutées correctement, LINQ to SQL valide la transaction locale et les retours.