sql >> Databáze >  >> RDS >> Sqlserver

Vrácení transakcí Entity Framework 6

Nemusíte volat Rollback ručně, protože používáte using prohlášení.

DbContextTransaction.Dispose metoda bude volána na konci using blok. A automaticky vrátí transakci zpět, pokud transakce není úspěšně potvrzena (není volána nebo nenarazí na výjimky). Následuje zdrojový kód SqlInternalTransaction.Dispose metoda (DbContextTransaction.Dispose nakonec na něj deleguje při použití poskytovatele SqlServer):

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

Vidíte, kontroluje, zda _innerConnection není null, pokud ne, vrátí transakci zpět (pokud je potvrzena, _innerConnection bude nulový). Podívejme se, co se Commit dělá:

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. Načítání obrazových dat do sloupců BLOB v Oracle

  2. Vynutit použití indexu v Oracle

  3. Maximalizace účinnosti databázového dotazu pro MySQL – část druhá

  4. zobrazit vlastní text SQL z výsledku sloupce tabulky