Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Na atualização da tabela, acione uma ação no meu código .NET


Você precisa fazer algumas perguntas.

Você quer alguma ou nenhuma lógica de negócios no nível de banco de dados? Obviamente, um gatilho de banco de dados pode fazer isso (executar alguma ação quando um valor é alterado, mesmo se apenas um valor muito específico).

Eu vi alguns sistemas que são db trigger pesados. Sua 'lógica' reside profundamente e altamente acoplada à plataforma db. Existem algumas vantagens nisso, mas a maioria das pessoas provavelmente diria que as desvantagens são muito grandes (acoplamento, falta de encapsulamento/reutilização).

Dependendo do que você está fazendo e suas inclinações, você pode:

  1. Certifique-se de que todos os objetos DAO/BusinessFunctoin chamem seu 'evento' object.function para fazer o que você quer quando uma certa mudança de valor ocorre.

  2. Use um gatilho para chamar seu 'evento' object.function quando ocorre uma certa mudança de valor.

  3. Seu gatilho faz tudo.

Eu pessoalmente me inclinaria para a Opção 2, onde você tem um gatilho mínimo (que simplesmente dispara a chamada de evento para o seu object.function ) para que você não acople profundamente seu banco de dados à sua lógica de negócios.

A opção 1 é boa, mas pode ser um pouco trabalhosa, a menos que você tenha um conjunto muito restrito de BF/DAO's que conversem com este campo db table.field que você deseja observar.

A opção 3 é a pior escolha, pois você acopla a lógica ao seu banco de dados e reduz sua acessibilidade à sua camada de lógica de negócios.

Dado isso, aqui estão algumas informações sobre como fazer isso por meio das Opções 2:

Usando este exemplo do MSDN:http://msdn.microsoft.com/en -us/library/938d9dz2.aspx .

Isso mostra como executar um gatilho e chamar um objeto CLR em um projeto.

Efetivamente, em seu projeto, você cria um gatilho e faz com que ele chame sua classe.

Observe a linha:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]

Isso define quando o código é acionado, então dentro do código, você pode verificar sua restrição, então acionar o resto do método (ou não), ou chamar outro object.method como necessário.

A principal diferença entre ir diretamente para o banco de dados e adicionar um gatilho é que isso lhe dá acesso a todos os objetos em seu projeto quando implantados juntos.