Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Отмяна на транзакция Entity Framework 6

Не е необходимо да се обаждате на Rollback ръчно, защото използвате using изявление.

DbContextTransaction.Dispose методът ще бъде извикан в края на using блок. И автоматично ще отмени транзакцията, ако транзакцията не е успешно ангажирана (не е извикана или се срещат изключения). Следва изходният код на SqlInternalTransaction.Dispose метод (DbContextTransaction.Dispose най-накрая ще му делегира, когато използвате доставчик на SqlServer):

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

Виждате ли, той проверява дали _innerConnection не е null, ако не, връщане на транзакцията (ако е ангажирана, _innerConnection ще бъде нула). Нека видим какво Commit прави:

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. Какъв размер използвате за varchar(MAX) във вашата декларация за параметри?

  2. PI() Примери в SQL Server

  3. Попълване на липсващи дати по групи

  4. Трябва да декларира грешката на променливата @myvariable с ADO параметризирана заявка

  5. Кога е по-добре да съхранявате флагове като битмаска, вместо да използвате асоциативна таблица?