Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pengembalian transaksi Entity Framework 6

Anda tidak perlu menelepon Rollback secara manual karena Anda menggunakan using penyataan.

DbContextTransaction.Dispose metode akan dipanggil di akhir using memblokir. Dan secara otomatis akan mengembalikan transaksi jika transaksi tidak berhasil dilakukan (tidak dipanggil atau ditemui pengecualian). Berikut adalah source code dari SqlInternalTransaction.Dispose metode (DbContextTransaction.Dispose akhirnya akan mendelegasikannya saat menggunakan penyedia SqlServer):

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

Anda lihat, ia memeriksa apakah _innerConnection bukan null, jika tidak, kembalikan transaksi (jika berkomitmen, _innerConnection akan menjadi nol). Mari kita lihat apa yang Commit melakukan:

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. Arti tanda kurung siku [] dalam perancang tabel MS-SQL?

  2. Tambahkan batasan unik ke kombinasi dua kolom

  3. Haruskah setiap kunci asing SQL Server memiliki indeks yang cocok?

  4. Melewati parameter string xml ke prosedur tersimpan SQL Server

  5. Batasan unik pada banyak kolom