Jawaban singkat:Tidak
Jawaban panjang:
Mendefinisikan TransactionScope saja tidak menentukan bahwa pembacaan atau penulisan apa pun akan dipanggil dalam suatu transaksi.
Untuk menjalankan sesuatu dalam suatu transaksi, Anda masih harus membuka dan melakukan transaksi!
TransactionOptions
dari TransactionScope untuk Timeout
dan IsolationLevel
cukup tentukan default untuk setiap transaksi yang dibuat dalam ruang lingkup tanpa opsi yang ditetapkan secara eksplisit. Sebenarnya TransactionScope memang membuat Transaksi tetapi tidak akan aktif tanpa membuka Transaksi baru. Secara internal ini akan melakukan beberapa hal yang rumit, mengkloning transaksi dll... jadi mari kita abaikan ini...
Tanpa transaksi, Anda tidak dapat menentukan tingkat isolasi, pernyataan pemilihan apa pun akan dijalankan dengan IsolationLevel.ReadCommitted
karena ini adalah default SQL Server.
Anda juga dapat menanyakan session.Transaction.IsActive
untuk melihat apakah transaksi saat ini aktif untuk sesi tersebut!
Mari kita lihat kode berikut, saya memberikan beberapa komentar untuk membuatnya sedikit lebih jelas
using (var scope = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions()
{
IsolationLevel = IsolationLevel.ReadUncommitted
}))
{
using (var session = sessionFactory.OpenSession())
{
// outside any transaction...
var x = session.Transaction.IsActive; // false;
// read will be done with SQL Server default (ReadCommited)
var pp = session.Query<Page>().Where(p => p.Photos.Count() > 1).ToList();
using (var transaction = session.BeginTransaction())
{
// will use ReadUncommitted according to the scope
var y = session.Transaction.IsActive; // true;
var p1 = session.Get<Page>(1);
transaction.Commit();
}
using (var transaction = session.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
{
// will use ReadCommitted according to the transaction initialization
var y = session.Transaction.IsActive; // true;
var p1 = session.Get<Page>(1);
transaction.Commit();
}
scope.Complete();
}
}
Anda juga dapat melihat bagaimana SQL Server bereaksi terhadap pengaturan tersebut dengan menggunakan SQL Server Profiler.
Cukup buat Jejak baru dan perhatikan Audit Login
acara, teks acara akan menyertakan tingkat isolasi dan Anda dapat melihat bahwa itu benar-benar melakukan Audit Login
setiap kali transaksi dibuat, misalnya
set transaction isolation level read uncommitted
--
Mohon koreksi saya jika ada informasi ini yang salah, saya hanya memikirkannya sendiri sehingga mungkin ada beberapa potensi kegagalan;)