Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Entity Framework 6 wycofywanie transakcji

Nie musisz wywoływać Rollback ręcznie, ponieważ używasz using oświadczenie.

DbContextTransaction.Dispose metoda zostanie wywołana na końcu using blok. I automatycznie wycofa transakcję, jeśli transakcja nie zostanie pomyślnie zatwierdzona (nie wywołane lub napotkane wyjątki). Poniżej znajduje się kod źródłowy SqlInternalTransaction.Dispose metoda (DbContextTransaction.Dispose w końcu przekaże to podczas korzystania z dostawcy SqlServer):

private void Dispose(bool disposing)
{
    // ...
    if (disposing && this._innerConnection != null)
    {
        this._disposing = true;
        this.Rollback();
    }
}

Widzisz, sprawdza, czy _innerConnection nie jest null, jeśli nie, wycofaj transakcję (jeśli zatwierdzona, _innerConnection będzie zerowa). Zobaczmy, co Commit robi:

internal void Commit() 
{
    // Ignore many details here...

    this._innerConnection.ExecuteTransaction(...);

    if (!this.IsZombied && !this._innerConnection.IsYukonOrNewer)
    {
        // Zombie() method will set _innerConnection to null
        this.Zombie();
    }
    else
    {
        this.ZombieParent();
    }

    // Ignore many details here...
}

internal void Zombie()
{
    this.ZombieParent();

    SqlInternalConnection innerConnection = this._innerConnection;

    // Set the _innerConnection to null
    this._innerConnection = null;

    if (innerConnection != null)
    {
        innerConnection.DisconnectTransaction(this);
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego w moich wartościach w kolumnie IDENTITY są luki?

  2. Niejednoznaczny błąd nazwy kolumny na jednym konkretnym serwerze

  3. LINQ to SQL Take bez pomijania powoduje wiele instrukcji SQL

  4. Użyj sys.trigger_event_types, aby wyświetlić listę typów zdarzeń wyzwalających w SQL Server

  5. Jak przekonwertować wartość daty/godziny na ciąg w SQL Server za pomocą funkcji CONVERT()