sql >> Base de Datos >  >> RDS >> Sqlserver

En la actualización de la tabla, active una acción en mi código .NET

Necesitas hacer un par de preguntas.

¿Desea algo o nada de su lógica comercial en el nivel de base de datos? Obviamente, un disparador de base de datos podría hacer esto (realizar alguna acción cuando se cambia un valor, incluso si solo es un valor muy específico).

He visto algunos sistemas que son pesados ​​​​db trigger. Su 'lógica' reside profunda y altamente acoplada con la plataforma db. Hay algunas ventajas en eso, pero la mayoría de la gente probablemente diría que las desventajas son demasiado grandes (acoplamiento, falta de encapsulación/reutilización).

Según lo que esté haciendo y sus inclinaciones, podría:

  1. Asegúrese de que todos los objetos DAO/BusinessFunctoin llamen a su 'evento' object.function para hacer lo que quieras cuando se produzca un cierto cambio de valor.

  2. Use un disparador para llamar a su 'evento' object.function cuando se produce un cierto cambio de valor.

  3. Tu gatillo lo hace todo.

Personalmente, me inclinaría por la opción 2, en la que tiene un desencadenante mínimo (que simplemente activa la llamada de evento a su object.function). ) para que no acople profundamente su base de datos a su lógica comercial.

La opción 1 está bien, pero puede ser un poco complicada a menos que tenga un conjunto muy limitado de BF/DAO que se comunican con este campo de tabla de base de datos que desea ver.

La opción 3 es, en mi humilde opinión, la peor opción, ya que acopla la lógica a su base de datos y reduce su accesibilidad a la capa de lógica empresarial.

Dado eso, aquí hay información para lograr esto a través de la opción 2:

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

Esto muestra cómo ejecutar un activador y llamar a un objeto CLR en un proyecto.

Efectivamente, en su proyecto, crea un disparador y hace que llame a su clase.

Observe la línea:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]

Esto define cuándo se activa el código, luego, dentro del código, puede verificar su restricción, luego activar el resto del método (o no), o llamar a otro object.method según sea necesario.

La principal diferencia entre ir directamente a la base de datos y agregar un disparador es que esto le da acceso a todos los objetos en su proyecto cuando se implementan juntos.