Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Trên cập nhật bảng, hãy kích hoạt một hành động trong mã .NET của tôi

Bạn cần phải hỏi một vài câu hỏi.

Bạn có muốn bất kỳ logic kinh doanh nào của mình ở cấp db không? Rõ ràng là trình kích hoạt db có thể thực hiện điều này (thực hiện một số hành động khi một giá trị bị thay đổi, ngay cả khi chỉ giá trị rất cụ thể).

Tôi đã thấy một số hệ thống bị kích hoạt db nặng. 'Logic' của chúng nằm sâu và kết hợp chặt chẽ với nền tảng db. Có một số ưu điểm cho điều đó, nhưng hầu hết mọi người có lẽ sẽ nói rằng nhược điểm là quá lớn (khớp nối, thiếu tính tổng hợp / khả năng tái sử dụng).

Tùy thuộc vào những gì bạn đang làm và khả năng của bạn, bạn có thể:

  1. Đảm bảo rằng tất cả các đối tượng DAO / BusinessFunctoin đều gọi 'event' object.function của bạn để làm những gì bạn muốn khi một thay đổi giá trị nhất định xảy ra.

  2. Sử dụng trình kích hoạt để gọi 'sự kiện' object.function của bạn khi một thay đổi giá trị nhất định xảy ra.

  3. Trình kích hoạt của bạn thực hiện mọi thứ.

Cá nhân tôi sẽ hướng tới Tùy chọn 2 trong đó bạn có một trình kích hoạt tối thiểu (chỉ kích hoạt lệnh gọi sự kiện đến object.function của bạn ) để bạn không kết hợp sâu db của mình với logic kinh doanh của bạn.

Tùy chọn 1 cũng được, nhưng có thể hơi phức tạp trừ khi bạn có một bộ BF / DAO rất hẹp nói với bảng db này. Trường bạn muốn xem.

Tùy chọn 3 là lựa chọn tồi tệ nhất khi bạn ghép nối logic với db của mình và giảm khả năng truy cập của nó vào lớp logic nghiệp vụ của bạn.

Do đó, đây là một số thông tin để đạt được điều này thông qua Tùy chọn 2:

Sử dụng ví dụ này từ MSDN: http://msdn.microsoft.com/en -us / library / 938d9dz2.aspx .

Điều này cho thấy cách chạy một trình kích hoạt và gọi một đối tượng CLR trong một dự án.

Một cách hiệu quả, trong dự án của bạn, bạn tạo một trình kích hoạt và để nó gọi lớp của bạn.

Lưu ý dòng:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]

Điều này xác định thời điểm mã kích hoạt, sau đó trong mã, bạn có thể kiểm tra ràng buộc của mình, sau đó kích hoạt phần còn lại của phương thức (hoặc không) hoặc gọi một object.method khác khi cần thiết.

Sự khác biệt chính giữa việc truy cập trực tiếp vào db và thêm trình kích hoạt là điều này cho phép bạn truy cập vào tất cả các đối tượng trong dự án của mình khi được triển khai cùng nhau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL hàng đến cột

  2. Hoàn tất quy trình sao chép bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác (Xuất-nhập) trong SQL Server

  3. Thiết kế mối quan hệ 1:1 và 1:m trong SQL Server

  4. Gợi ý về SQL SERVER 2008 JOIN

  5. Kiến trúc SQL Server AlwaysOn (Nhóm khả dụng) và Cài đặt từng bước -3 Thất bại thủ công qua các bước