Linq-to-sql échoue lors de l'insertion et de la mise à jour lorsqu'il s'agit d'un sortinggger attaché

J'ai quelques problèmes avec linq-to-sql ces derniers time. Le problème est qu'il "pense" qu'il échoue sur les insertions et mises à jour lorsque nous avons un triggersur attaché à l'événement. Un exemple pourrait être une ligne, où un triggersur est attaché pour définir le deux-points "LastUpdated" à l'heure actuelle, lorsqu'une ligne est modifiée. Cela obligera linq-to-sql à penser que la mise à jour ou l'insertion a échoué, mais ce n'est que quelques fois, comme cela arrive parfois, je pense que c'est quand le server sql est sous forte charge et donc pas capable de Pour exécuter le triggersur avant la validation, il ne s'agit que de spéculations. Comme mes scripts ne sont qu'une partie d'un script beaucoup plus grand, désactiver le sortinggger n'est pas une option, je dois donc find une solution ou réécrire mon programme. L'un de vous a-t-il déjà rencontré ce problème et a-t-il trouvé une solution, par exemple en désactivant la validation après les insertions?

Le triggersur

USE [cnhha] GO /****** Object: Trigger [dbo].[LastUpdated] Script Date: 05/12/2011 16:26:51 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[LastUpdated] ON [dbo].[CN_User] FOR INSERT, UPDATE AS update cn_user set lastupdated=getdate() where campusnetuserid in (select campusnetuserid from inserted) 

Vous avez probablement besoin de SET NOCOUNT ON dans votre triggersur

Sauf le cas étroit (SQLDataAdapter) mentionné dans ma question "SET NOCOUNT ON" , il est requirejs pour la plupart des codes clients

Vous pouvez également supprimer le triggersur si vous pouvez modifier votre côté client UPDATE pour utiliser le mot key DEFAULT

 update cn_user set col1 = this, col2 = that,..., lastupdated= DEFAULT where ... 

Vos triggersurs renvoient-ils des données via des SELECT ? Voir cet article MSDN: CREATE TRIGGER

Lorsqu'un triggersur se triggers, les résultats sont renvoyés à l'application appelante, tout comme les procédures stockées. Pour éviter que les résultats ne soient renvoyés à une application en raison d'un triggersment de triggersur, n'incluez pas les instructions SELECT qui renvoient des résultats, ni les instructions qui effectuent une assignation de variable dans un triggersur. Un triggersur qui inclut des instructions SELECT qui renvoient des résultats à l'user ou des instructions qui effectuent une assignation de variable nécessite une gestion spéciale; ces résultats returnnés devraient être écrits dans chaque application dans laquelle les modifications à la table de triggersment sont autorisées. Si l'affectation de variable doit se produire dans un triggersur, utilisez une instruction SET NOCOUNT au début du triggersur pour éliminer le return de tout jeu de résultats.

En outre, si vous pensez que les triggersurs provoquent une charge importante sur le moteur de database, avez-vous envisagé d'utiliser Service Broker pour rendre leur post-traitement asynchronous?

Si vous pouviez inclure le code pour un triggersur représentatif, cela nous aiderait à mieux diagnostiquer le problème que vous rencontrez.

Vous pouvez prendre l'aide du profileur SQL pour toutes les activités qui se déroulent au cours du process. Vous pouvez capturer et save des données sur chaque événement dans un file ou une table.

Si vous avez mis à jour la propriété derrière votre code, vous pouvez soit éviter complètement le triggersur et définir directement la propriété LastUpdated sur l'entité, soit ne pas effectuer de validation (autre que la validation du schéma) la valeur de la propriété LastUpdated ?