Мне интересно, возможно ли это. Мы хотим, чтобы функция работала в нашем .NET-коде при обновлении значения в конкретной таблице. Это может быть при вставке или обновлении записи. Это возможно? Если нет, есть ли альтернативный процесс?
В обновлении таблицы активируйте действие в моем коде .NET.
Ответ 1
Вам нужно задать пару вопросов.
Вы хотите, чтобы ни одна из ваших бизнес-логик не была на уровне db? Очевидно, что триггер db мог бы это сделать (выполнить какое-то действие при изменении значения, даже если это очень специфическое значение).
Я видел некоторые системы, которые являются триггерными триггерами. Их "логика" находится глубоко и тесно связана с платформой db. Есть некоторые преимущества для этого, но большинство людей, вероятно, скажут, что недостатки слишком велики (связь, отсутствие инкапсуляции/повторного использования).
В зависимости от того, что вы делаете, и ваших склонностей вы могли:
-
Убедитесь, что все объекты DAO/BusinessFunctoin вызывают ваше событие
object.function
, чтобы делать то, что вы хотите, когда происходит определенное изменение значения. -
Используйте триггер для вызова вашего события
object.function
при изменении определенного значения. -
Ваш триггер делает все.
Я лично склоняюсь к Варианту 2, где у вас есть минимальный триггер (который просто запускает вызов события на ваш object.function
), поэтому вы не глубоко привязываете свой дБ к своей бизнес-логике.
Вариант 1 хорош, но может быть немного хлопот, если у вас нет очень узкого набора BF/DAO, которые будут разговаривать с этим db table.field, который вы хотите посмотреть.
Вариант 3 - это наихудший выбор, поскольку вы связываете логику с вашим db и уменьшаете ее доступность к вашему уровню бизнес-логики.
Учитывая, что здесь приведена некоторая информация для выполнения этого с помощью опций 2:
Используя этот пример из MSDN: http://msdn.microsoft.com/en-us/library/938d9dz2.aspx.
Это показывает, как запустить запуск триггера и вызвать объект CLR в проекте.
Эффективно, в вашем проекте вы создаете триггер и вызываете его класс.
Обратите внимание на строку: [SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]
Это определяет, когда код срабатывает, тогда внутри кода вы можете проверить свое ограничение, затем запустить оставшуюся часть метода (или нет) или вызвать другой object.method
по мере необходимости.
Основное различие между переходом непосредственно на db и добавлением триггера - это доступ к всем объектам вашего проекта при развертывании вместе.
Ответ 2
Я никогда не пробовал, но это возможно. Вы можете написать сборку CLR и вызвать ее из триггера таблицы.
Здесь вы можете увидеть пример здесь.
Но вы должны опубликовать свою проблему, и вы можете найти лучшую работу.