1

Frage an die Verwaltung trasactions mit EF-Core bezogen werden:Hat eine Transaktion Rollback() eine Chance, eine Ausnahme auszulösen?

Hat ein IDbContextTransaction.Rollback() eine Chance haben, eine Ausnahme zurück, so dass es überhaupt Sinn, es zu platzieren in einem Try-Block machen könnte?

heißen

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: In dieser besonderen Situation ist es nicht möglich, die Transaktion in eine using Anweisung einbetten, so dass ein manueller .Rollback() Anruf in dem realen Code erforderlich ist.

+1

Natürlich Rollback fehlschlagen kann Handling. Wenn beispielsweise die SqlConnection beim Zurücksetzen der Transaktion unterbrochen wird, wird eine Ausnahme ausgelöst. Weitere Informationen: https://msdn.microsoft.com/en-us/library/zayx5s0h(v=vs.110).aspx –

+1

Da Sie über eine Schnittstelle sprechen, ist die Antwort: Es hängt von der tatsächlichen Implementierung ab. Aber im Allgemeinen: Ja, es könnte eine Ausnahme auslösen, zum Beispiel wird 'SqlTransaction.Rollback()' eine 'InvalidOperationException' auslösen, wenn die Transaktion bereits festgeschrieben wurde oder bereits zurückgesetzt wurde (siehe folgenden Link auf MSDN: https: // msdn .microsoft.com/de-de/library/zayx5s0h (v = vs.110) .aspx) – bassfader

Antwort

0

Die meiste Zeit ist es nicht bis:

  1. Deadlock-Erkennung
  2. Kein Internet Connectivity
  3. logisch und physikalisch konsistente Verbindung
  4. Shutdown, Stromausfall, Unerwarteter Abbruch

Um diese Situationen anzugehen, können Sie:

  1. Verwenden Sie die Einstellung Xact_Abort. Wenn SET XACT_ABORT ON ist, wenn eine Transact-SQL-Anweisung einen Laufzeitfehler auslöst, wird die gesamte Transaktion beendet und zurückgesetzt. Wenn SET XACT_ABORT auf OFF gesetzt ist, wird in einigen Fällen nur die Transact-SQL-Anweisung zurückgesetzt, die den Fehler ausgelöst hat, und die Transaktion wird weiter verarbeitet. Abhängig von der Schwere des Fehlers kann die gesamte Transaktion zurückgesetzt werden, selbst wenn SET XACT_ABORT deaktiviert ist. OFF ist die Standardeinstellung.

  2. abfangen und behandelt den Fehler, und ein Rollback im Fehler angeben

Verwandte Themen