Saya ingin menjalankan beberapa pernyataan penyisipan pada beberapa tabel. Saya menggunakan dapper.net. Saya tidak melihat cara untuk menangani transaksi dengan dapper.net.
Bagikan ide Anda tentang cara menggunakan transaksi dengan dapper.net.
c#
transactions
dapper
Amit
sumber
sumber
Dispose()
metode. JikaComplete()
belum dipanggil, transaksi akan dibatalkan.TransctionScope
use block jika Anda memilih jawaban ini.Saya lebih suka menggunakan pendekatan yang lebih intuitif dengan mendapatkan transaksi langsung dari koneksi:
sumber
.BeginTransaction()
? Jika itu masalahnya, metode ekstensi ini akan mempromosikan penggunaan transaksi yang salah. (IMO, bahkan harus membuang "tidak dapat membuka transaksi setelah koneksi sudah terbuka".)Execute
, karena ini diperlukan.Anda harus dapat menggunakan
TransactionScope
karena Dapper hanya menjalankan perintah ADO.NET.sumber
Mengingat semua tabel Anda berada dalam database tunggal, saya tidak setuju dengan
TransactionScope
solusi yang disarankan dalam beberapa jawaban di sini. Lihat jawaban ini .TransactionScope
umumnya digunakan untuk transaksi terdistribusi; transaksi yang mencakup database yang berbeda mungkin pada sistem yang berbeda. Ini membutuhkan beberapa konfigurasi pada sistem operasi dan SQL Server yang tanpanya ini tidak akan berfungsi. Ini tidak disarankan jika semua kueri Anda bertentangan dengan satu contoh database.Tapi, dengan database tunggal ini mungkin berguna ketika Anda perlu memasukkan kode dalam transaksi yang tidak di bawah kendali Anda. Dengan database tunggal, tidak memerlukan konfigurasi khusus juga.
connection.BeginTransaction
adalah sintaks ADO.NET untuk mengimplementasikan transaksi (di C #, VB.NET dll.) terhadap database tunggal. Ini tidak bekerja di beberapa database.Begitu,
connection.BeginTransaction()
cara yang lebih baik untuk pergi.Bahkan cara yang lebih baik untuk menangani transaksi adalah dengan mengimplementasikan UnitOfWork seperti yang dijelaskan dalam jawaban ini .
sumber
TransactionScope
yang tidak efisien untuk apa yang diinginkan OP. Saya setuju ituTransactionScope
adalah alat yang bagus dalam banyak kasus; tapi bukan ini.Jawaban Daniel bekerja seperti yang diharapkan untuk saya. Untuk kelengkapan, berikut cuplikan yang menunjukkan commit dan rollback menggunakan cakupan transaksi dan rapi:
sumber
Dispose
metode mana yang dipanggil pertama atau kedua, hanya saja itu dipanggil dua kali. Mengenai poin bahwa "menelepon untuk kedua kalinya tidak berbahaya", itu adalah asumsi besar. Saya telah mempelajari bahwa dokumen dan implementasi sebenarnya sering tidak setuju. Tetapi jika Anda ingin kata Microsoft untuk itu: msdn.microsoft.com/en-us/library/…