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

Pada pembaruan tabel, picu tindakan dalam kode .NET saya

Anda perlu mengajukan beberapa pertanyaan.

Apakah Anda ingin tidak ada logika bisnis Anda di tingkat db? Jelas pemicu db dapat melakukan ini (melakukan beberapa tindakan saat nilai diubah, meskipun hanya nilai yang sangat spesifik).

Saya telah melihat beberapa sistem yang memicu db berat. 'Logika' mereka berada dalam dan sangat digabungkan dengan platform db. Ada beberapa keuntungan untuk itu, tetapi kebanyakan orang mungkin akan mengatakan kerugiannya terlalu besar (kopling, kurangnya enkapuslasi/penggunaan kembali).

Bergantung pada apa yang Anda lakukan dan kecenderungan Anda, Anda dapat:

  1. Pastikan semua objek DAO/BusinessFunctoin memanggil object.function 'event' Anda untuk melakukan apa yang Anda inginkan ketika terjadi perubahan nilai tertentu.

  2. Gunakan pemicu untuk memanggil object.function 'acara' Anda ketika terjadi perubahan nilai tertentu.

  3. Pemicu Anda melakukan segalanya.

Saya pribadi akan condong ke Opsi 2 di mana Anda memiliki pemicu minimal (yang hanya menjalankan panggilan acara ke object.function Anda ) sehingga Anda tidak secara mendalam memasangkan db Anda dengan logika bisnis Anda.

Opsi 1 baik-baik saja, tetapi mungkin sedikit merepotkan kecuali Anda memiliki kumpulan BF/DAO yang sangat sempit yang berbicara dengan tabel db ini. bidang yang ingin Anda tonton.

Opsi 3 adalah pilihan terburuk saat Anda memasangkan logika ke db Anda dan mengurangi aksesibilitasnya ke lapisan logika bisnis Anda.

Mengingat bahwa, berikut adalah beberapa informasi untuk mencapai ini melalui Opsi 2:

Menggunakan contoh ini dari MSDN:http://msdn.microsoft.com/en -us/library/938d9dz2.aspx .

Ini menunjukkan cara menjalankan pemicu dan memanggil objek CLR dalam sebuah proyek.

Secara efektif, dalam proyek Anda, Anda membuat pemicu dan memintanya memanggil kelas Anda.

Perhatikan baris:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]

Ini menentukan kapan kode diaktifkan, lalu di dalam kode, Anda dapat memeriksa batasan Anda, lalu mengaktifkan metode lainnya (atau tidak), atau memanggil object.method lain sesuai kebutuhan.

Perbedaan utama antara langsung ke db dan menambahkan pemicu adalah ini memberi Anda akses ke semua objek di proyek Anda saat diterapkan bersama.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gunakan FILE_IDEX() untuk Mengembalikan ID File Database di SQL Server

  2. Menyimpan HTML di SQL Server

  3. Audit Data di NHibernate dan SqlServer

  4. Dalam SQL, bagaimana Anda bisa mengelompokkan dalam rentang?

  5. Bagaimana seseorang dapat mengulangi hasil prosedur tersimpan dari dalam prosedur tersimpan lain .... tanpa kursor?