1

Question liée à la gestion trasactions avec EF de base:Est-ce qu'une transaction Rollback() a une chance de déclencher une exception?

Est-ce un IDbContextTransaction.Rollback() ont une chance de retourner une exception, afin qu'il puisse jamais judicieux de le placer dans un bloc d'essai?

à savoir

try 
    { 
     //... 
     if(condition) 
      transaction.Commit(); 
     else 
      throw methodReturn.Exception; 
    } 
    catch (Exception e) 
    { 
     try  // Does this try make any sense? 
     { 
      transaction.Rollback(); 
     } 
     catch 
     { 
      // Log 
     } 
     throw e; 
    } 

PD: Dans cette situation particulière, il est impossible d'intégrer la transaction dans une déclaration using, donc un manuel .Rollback() appel est requis dans le code réel.

+1

Bien sûr Rollback peut échouer. Par exemple, si la SqlConnection casse lors de l'annulation de la transaction, une exception est levée. Plus d'informations: https://msdn.microsoft.com/en-us/library/zayx5s0h(v=vs.110).aspx –

+1

Puisque vous parlez d'une interface, la réponse est: Cela dépend de l'implémentation réelle. Mais en général: Oui, il pourrait lancer une exception, par exemple le 'SqlTransaction.Rollback()' lancera une exception 'InvalidOperationException' lorsque la transaction a déjà été validée ou a déjà été annulée (voir le lien suivant sur MSDN: https: // msdn .microsoft.com/fr-fr/library/zayx5s0h (v = vs.110) .aspx) – bassfader

Répondre

0

La plupart du temps il faut attendre:

  1. Deadlock Détection
  2. Pas de connectivité Internet
  3. connexion Logiquement et consistantes
  4. arrêt, panne de courant, la résiliation inattendue

Pour résoudre ces situations, vous pouvez:

  1. Utilisez le paramètre Xact_Abort. Lorsque SET XACT_ABORT est ON, si une instruction Transact-SQL génère une erreur d'exécution, la transaction entière est terminée et annulée. Lorsque SET XACT_ABORT est désactivé, dans certains cas, seule l'instruction Transact-SQL qui a déclenché l'erreur est annulée et la transaction continue le traitement. Selon la gravité de l'erreur, la transaction entière peut être annulée même lorsque SET XACT_ABORT est désactivé. OFF est le paramètre par défaut.

  2. Catch et gérer l'erreur, et spécifiez un rollback dans le traitement des erreurs