2009-11-23 4 views
2

Existe-t-il un hook dans Linq to SQL qui me permettrait de modifier manuellement une commande avant qu'elle ne soit envoyée à la base de données? Plus précisément, j'essaie d'introduire la syntaxe WITH CHANGE_TRACKING_CONTEXT(@contextData) chaque fois qu'une insertion/mise à jour/suppression est appliquée à la base de données afin de pouvoir ajouter des informations supplémentaires sur le suivi des modifications, comme l'utilisateur qui a initié le changement (ceci est une application web qui utilise l'authentification SQL).Linq to SQL: Commande Ammend avant la soumission à la base de données

Cette syntaxe devra simplement être insérée au début du CommandText, avec un paramètre supplémentaire (@contextData) ajouté à l'objet SqlCommand qui contiendra les données pour l'instruction supplémentaire.

Merci d'avance.

+0

FYI - J'ai mis à jour ma réponse ci-dessous avec quelques alternatives. –

Répondre

1

Vous ne devriez pas avoir à modifier de SQL ... juste fournir votre DataContext avec une SqlConnection existante. http://msdn.microsoft.com/en-us/library/bb386986.aspx

Avant de soumettre les modifications via DataContext.SubmitChanges, créez votre propre SqlCommand (en utilisant la même SqlConnection vous avez créé votre DataContext avec) pour la commande WITH CHANGE_TRACKING_CONTEXT et l'exécuter. Cette déclaration sera valide pour la durée de la connexion à la base de données.

MISE À JOUR: Depuis cela ne fonctionne pas, et si faire le suivi des modifications est manuellement pas une option (via DataContext.GetChangeSet qui est ce que je fais sur mon application actuelle), je pense que vous allez être coincé faire à peu près la chose la plus laide possible: specify the SQL statements for all of your INSERT/UPDATE/DELETE through partial methods on your DataContext (dernière section). Ou encore plus laid, utilisez DataContext.Log pour consigner tout le SQL généré, exécutez les SubmitChanges dans une Transaction, relancez-le, puis modifiez le SQL que vous obtenez du log et exécutez-le comme vous le souhaitez.

+0

J'aime cette idée. Je vais devoir voir si je peux injecter ceci dans la chaîne SubmitChanges via l'héritage. Je vous ferai savoir comment je m'entends. Merci. –

+0

Malheureusement, l'émission de l'instruction par elle-même, sans la commande de mise à jour suivante par exemple, entraîne une erreur. Je vais devoir trouver un moyen de l'insérer dans les commandes de mise à jour réelles. Merci quand même. –

+0

FYI - J'ai mis à jour la réponse ci-dessus avec quelques alternatives. –

Questions connexes