2010-02-23 6 views
3

Nous avons créé une table avec un déclencheur qui met à jour un champ ModifiedDate chaque fois qu'il y a un UPDATE/INSERT. Pour une transaction particulière dans notre application, cependant, nous aimerions désactiver temporairement ce déclencheur.Désactiver les déclencheurs dans LINQ to SQL

Serait-il possible de le faire directement à partir de LINQ? (Directement, n'appelant pas une procédure stockée)

+1

avertissement, avertissement! la désactivation d'un déclencheur affectera tous les autres UPDATE qui s'exécutent en même temps! ceci (désactiver le déclencheur) sonne comme un hack à un mauvais design, donc je vais offrir un hack merdique pour résoudre ce problème. mettre à jour la date dans l'application à quelque chose comme 1/1/1900, puis dans votre déclencheur réaliser cette date fausse, ignorer la logique de mise à jour de date standard et le redéfinir à la DELETED.yourDateColumn, restaurant ainsi votre date. –

+0

Arg. Tu as raison. Je n'ai jamais eu de problème similaire auparavant et je n'avais pas remarqué que les solutions utilisant SQL désactivaient les triggers pour la table et non pour la portée de la transaction. Il s'agissait en effet d'être un hack rapide pour résoudre un changement des exigences à la fin d'un projet (nous devons maintenant effectuer une tâche de maintenance dans les enregistrements de la BD, mais étant un processus interne que le client ne veut pas le champ "ModifiedDate" à modifier). Je ne suis pas un grand fan de hacks, cependant, et vous m'avez convaincu. Nous supprimerons complètement les triggers et mettrons à jour le champ uniquement si nécessaire. Merci! – salgiza

Répondre

1

Ne pas utiliser le code généré. Vous pouvez vous connecter à une procédure stockée, mais cela peut impliquer un travail supplémentaire. Pour les données de "dernière mise à jour", il est possible de se connecter à l'ensemble de modifications DataContext obtenu lors de la méthode SubmitChanges - il est donc possible de définir des propriétés (peut-être basées sur une interface) pour les lignes qui sont soumis pour UPDATE.

J'ai un problème similaire, où ma vérification déclenche se comportent différemment selon les colonnes font partie de la déclaration UPDATE (via UPDATE(ColumnName) dans la gâchette), donc dans une question similaire que je avais besoin de pirater le contexte de données à always consider a specific column dirty. Cela peut avoir certains cross-over.

Mais non: je ne pense pas que vous pouvez complètement désactiver les déclencheurs.

+0

Eh bien, j'ai imaginé la réponse, mais ça aurait été bien s'il y avait eu un moyen! :) – salgiza