Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

При актуализация на таблица, задействайте действие в моя .NET код

Трябва да зададете няколко въпроса.

Искате ли някаква или никаква от вашата бизнес логика на ниво db? Очевидно db тригер може да направи това (извършване на някакво действие, когато стойност се промени, дори ако е само много специфична стойност).

Виждал съм някои системи, които са db задействали тежко. Тяхната „логика“ е дълбоко и силно свързана с db платформата. Има някои предимства в това, но повечето хора вероятно биха казали, че недостатъците са твърде големи (свързване, липса на капсулиране/повторна употреба).

В зависимост от това какво правите и вашите наклонности бихте могли:

  1. Уверете се, че всички DAO/BusinessFunctoin обекти извикват вашето „събитие“ object.function да правите това, което искате, когато настъпи определена промяна на стойността.

  2. Използвайте тригер, за да извикате вашето „събитие“ object.function когато настъпи промяна на определена стойност.

  3. Вашият тригер прави всичко.

Аз лично бих склонил към Вариант 2, където имате минимален тригер (който просто задейства извикването на събитие към вашата object.function ), така че да не свързвате дълбоко своя db с вашата бизнес логика.

Вариант 1 е добре, но може да бъде малко неприятно, освен ако нямате много тесен набор от BF/DAO, които говорят с това db table.field, което искате да наблюдавате.

Вариант 3 е имхо най-лошият избор, тъй като свързвате логиката към вашата база данни и намалявате нейната достъпност до вашия бизнес логически слой.

Като се има предвид това, ето малко информация за постигане на това чрез Опции 2:

Използвайки този пример от MSDN:http://msdn.microsoft.com/en -us/library/938d9dz2.aspx .

Това показва как да стартирате тригер и да извикате CLR обект в проект.

Ефективно във вашия проект вие създавате тригер и го карате да извиква вашия клас.

Обърнете внимание на реда:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]

Това определя кога кодът се задейства, след което в рамките на кода можете да проверите вашето ограничение, след това да задействате останалата част от метода (или не) или да извикате друг object.method колкото е необходимо.

Основната разлика между отиването директно в базата данни и добавянето на тригер е, че това ви дава достъп до всички обекти във вашия проект, когато се внедряват заедно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на поднабор от записи заедно с общ брой записи

  2. Как да се свържете със SQL Server с удостоверяване на Windows от Node.JS с помощта на модул mssql

  3. 2 начина за изброяване на всички функции с таблично значение в база данни на SQL Server

  4. Как да коригирате „Отказът ALTER TABLE SWITCH не е успешен“

  5. единична заявка за изтриване от множество таблици в sql сървър