Non è necessario chiamare Rollback
manualmente perché stai usando using
dichiarazione.
DbContextTransaction.Dispose
il metodo verrà chiamato alla fine di using
bloccare. E eseguirà automaticamente il rollback della transazione se la transazione non viene eseguita correttamente (non sono state richiamate o riscontrate eccezioni). Di seguito è riportato il codice sorgente di SqlInternalTransaction.Dispose
metodo (DbContextTransaction.Dispose
alla fine delegherà ad esso quando si utilizza il provider SqlServer):
private void Dispose(bool disposing)
{
// ...
if (disposing && this._innerConnection != null)
{
this._disposing = true;
this.Rollback();
}
}
Vedi, controlla se _innerConnection
non è nullo, in caso contrario, eseguire il rollback della transazione (se impegnata, _innerConnection
sarà nullo). Vediamo cosa Commit
fa:
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);
}
}