Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Lors de la mise à jour de la table, déclencher une action dans mon code .NET

Vous devez poser quelques questions.

Voulez-vous aucune de votre logique métier au niveau de la base de données ? Évidemment, un déclencheur de base de données pourrait le faire (effectuer une action lorsqu'une valeur est modifiée, même s'il s'agit d'une valeur très spécifique uniquement).

J'ai vu certains systèmes qui sont lourds à déclencher db. Leur « logique » réside profondément et fortement couplée à la plate-forme db. Il y a quelques avantages à cela, mais la plupart des gens diraient probablement que les inconvénients sont trop importants (couplage, manque d'encapsulation/réutilisabilité).

En fonction de ce que vous faites et de vos penchants, vous pourriez :

  1. Assurez-vous que tous les objets DAO/BusinessFunctoin appellent votre 'événement' object.function faire ce que vous voulez quand un certain changement de valeur se produit.

  2. Utilisez un déclencheur pour appeler votre 'événement' object.function lorsqu'un certain changement de valeur se produit.

  3. Votre déclencheur fait tout.

Personnellement, je pencherais vers l'option 2 où vous avez un déclencheur minimal (qui déclenche simplement l'appel d'événement à votre object.function ) afin de ne pas associer profondément votre base de données à votre logique métier.

L'option 1 est correcte, mais peut être un peu compliquée à moins que vous n'ayez un ensemble très restreint de BF/DAO qui communiquent avec cette table.champ de base de données que vous souhaitez surveiller.

L'option 3 est à mon humble avis le pire choix car vous couplez la logique à votre base de données et réduisez son accessibilité à votre couche de logique métier.

Compte tenu de cela, voici quelques informations pour y parvenir via les options 2 :

En utilisant cet exemple de MSDN :http://msdn.microsoft.com/en -us/library/938d9dz2.aspx .

Cela montre comment exécuter un déclencheur et appeler un objet CLR dans un projet.

En effet, dans votre projet, vous créez un déclencheur et faites-le appeler votre classe.

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

Cela définit quand le code se déclenche, puis dans le code, vous pouvez vérifier votre contrainte, puis déclencher le reste de la méthode (ou non), ou appeler un autre object.method comme requis.

La principale différence entre aller directement à la base de données et ajouter un déclencheur est que cela vous donne accès à tous les objets de votre projet lorsqu'ils sont déployés ensemble.