Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Nell'aggiornamento della tabella, attiva un'azione nel mio codice .NET

Devi fare un paio di domande.

Vuoi una o nessuna delle tue logiche di business a livello di db? Ovviamente un trigger db potrebbe farlo (esegui alcune azioni quando un valore viene modificato, anche se solo un valore molto specifico).

Ho visto alcuni sistemi che sono db trigger pesanti. La loro "logica" risiede profondamente e fortemente accoppiata con la piattaforma db. Ci sono alcuni vantaggi in questo, ma la maggior parte delle persone probabilmente direbbe che gli svantaggi sono troppo grandi (accoppiamento, mancanza di incapsulamento/riutilizzabilità).

A seconda di cosa stai facendo e delle tue inclinazioni potresti:

  1. Assicurati che tutti gli oggetti DAO/BusinessFunctoin chiamino il tuo 'evento' object.function per fare ciò che vuoi quando si verifica un determinato cambiamento di valore.

  2. Usa un trigger per chiamare il tuo "evento" object.function quando si verifica una certa variazione di valore.

  3. Il tuo trigger fa tutto.

Personalmente mi orienterei verso l'opzione 2 in cui hai un trigger minimo (che semplicemente attiva la chiamata dell'evento al tuo object.function ) in modo da non accoppiare profondamente il tuo db alla tua logica aziendale.

L'opzione 1 va bene, ma potrebbe essere un po' una seccatura a meno che tu non abbia un insieme molto ristretto di BF/DAO che parlano con questo campo tabella db che vuoi guardare.

L'opzione 3 è la scelta peggiore poiché accoppi la logica al tuo db e riduci la sua accessibilità al tuo livello di logica aziendale.

Dato questo, ecco alcune informazioni per ottenere ciò tramite le Opzioni 2:

Utilizzando questo esempio da MSDN:http://msdn.microsoft.com/en -us/library/938d9dz2.aspx .

Questo mostra come eseguire un trigger e chiamare un oggetto CLR in un progetto.

In effetti, nel tuo progetto, crei un trigger e gli fai chiamare la tua classe.

Nota la riga:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]

Questo definisce quando il codice viene attivato, quindi all'interno del codice, puoi controllare il tuo vincolo, quindi attivare il resto del metodo (o meno) o chiamare un altro object.method come necessario.

La differenza principale tra l'andare direttamente al db e l'aggiunta di un trigger è che questo ti dà accesso a tutti gli oggetti nel tuo progetto quando vengono distribuiti insieme.