Tidak ada aturan keras dan cepat, tetapi saya melihat beberapa alasan untuk mengontrol transaksi dari tingkat bisnis:
-
Komunikasi melintasi batas penyimpanan data. Transaksi tidak harus melawan RDBMS; mereka bisa melawan berbagai entitas.
-
Kemampuan untuk mengembalikan/melakukan transaksi berdasarkan logika bisnis yang mungkin tidak tersedia untuk prosedur tersimpan tertentu yang Anda panggil.
-
Kemampuan untuk memanggil serangkaian kueri sewenang-wenang dalam satu transaksi. Ini juga menghilangkan kekhawatiran tentang jumlah transaksi.
-
Preferensi pribadi:c# memiliki struktur yang lebih elegan untuk mendeklarasikan transaksi:a
using
memblokir. Sebagai perbandingan, saya selalu menemukan transaksi di dalam prosedur tersimpan menjadi rumit saat melompat ke rollback/commit.
Ini mungkin atau mungkin tidak menjadi masalah tergantung pada berapa banyak transaksi yang dibuka (tidak jelas apakah ini pekerjaan tunggal, atau prosedur yang dijalankan dengan konkurensi tinggi). Saya menyarankan untuk melihat kunci apa yang ditempatkan pada objek, dan berapa lama kunci tersebut dipegang.
Ingatlah bahwa validasi mungkin harus kunci; bagaimana jika data berubah antara saat Anda memvalidasinya dan saat tindakan terjadi?
Jika adalah masalah, Anda dapat memecah prosedur yang melanggar menjadi dua prosedur, dan memanggil satu dari luar TransactionScope
.