J'ai une simple ligne que j'édite en utilisant LINQ. Il a environ 30 colonnes, y compris une séquence numérique de clé primaire.Combien de frais généraux 'Update Check' a pour LINQ UPDATES
Lorsqu'une mise à jour est effectuée via LINQ, l'instruction UPDATE inclut toutes les colonnes de la table (pour la vérification de la simultanéité).
Je me demande comment cela est inefficace - si ce n'est pas négligeable. Comme il y a un index sur la clé primaire, je suppose que cette colonne est utilisée pour la recherche de ligne initiale, puis les autres champs sont vérifiés en plus. Je n'aurais pas pensé que cela prendrait plus qu'une quantité négligeable de temps.
La raison pour laquelle je demande est que j'ai vu cette mise à jour prendre plus d'une seconde dans certains cas, ce qui ne semble pas juste. Il se peut qu'il y ait d'autres opérations de longue durée, mais cela m'a rendu curieux de savoir si je devrais être inquiet ou non. Je sais que je peux mettre 'UpdateCheck' à jamais pour tous les autres champs, mais c'est douloureux.
Existe-t-il un moyen de désactiver 'Update Check' pour un seul SubmitChanges(), ou dois-je le faire en changeant 'UpdateCheck' pour chaque champ.
Tout conseil serait apprécié.
Voici la mise à jour SQL:
exec sp_executesql N'UPDATE [dbo].[SiteVisit]
SET [TotalTimeOnSite] = @p12, [ContentActivatedTime] = @p13
WHERE ([SiteVisitId] = @p0) AND ([SiteUserId] IS NULL) AND ([ClientGUID] = @p1) AND ([ServerGUID] IS NULL) AND ([UserGUID] = @p2) AND ([SiteId] = @p3) AND ([EntryURL] = @p4) AND ([CampaignId] = @p5) AND ([Date] = @p6) AND ([Cookie] IS NULL) AND ([UserAgent] = @p7) AND ([Platform] IS NULL) AND ([Referer] = @p8) AND ([KnownRefererId] = @p9) AND ([FlashVersion] IS NULL) AND ([SiteURL] IS NULL) AND ([Email] IS NULL) AND ([FlexSWZVersion] IS NULL) AND ([HostAddress] IS NULL) AND ([HostName] IS NULL) AND ([InitialStageSize] IS NULL) AND ([OrderId] IS NULL) AND ([ScreenResolution] IS NULL) AND ([TotalTimeOnSite] IS NULL) AND ([CumulativeVisitCount] = @p10) AND ([ContentActivatedTime] IS NULL) AND ([ContentCompleteTime] IS NULL) AND ([MasterVersion] = @p11) AND ([VisitedHome] IS NULL) AND ([VisitedStore] IS NULL) AND ([VisitedVideoDemos] IS NULL) AND ([VisitedProducts] IS NULL) AND ([VisitedAdvantages] IS NULL) AND ([VisitedGallery] IS NULL) AND ([VisitedTestimonials] IS NULL) AND ([VisitedEvolution] IS NULL) AND ([VisitedFAQ] IS NULL)',N'@p0 int,@p1 uniqueidentifier,@p2 uniqueidentifier,@p3 int,@p4 varchar(46),@p5 varchar(3),@p6 datetime,@p7 varchar(164),@p8 varchar(36),@p9 int,@p10 int,@p11 int,@p12 int,@p13 int',@p0=1009772,@p1='039A0614-31EE-4DD9-9E1A-8A0F947E1719',@p2='C83C0E68-142A-47CB-B7F9-BAF462E79429',@p3=1,@p4='http://www.example.com/default.aspx?c=183',@p5='183',@p6='2008-11-30 18:22:59:047',@p7='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SIMBAR={85B62341-3F6B-4645-A473-53A2D2BB66DC}; FunWebProducts; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)',@p8='http://apps.facebook.com/inthemafia/',@p9=1,@p10=1,@p11=30,@p12=6,@p13=6
une solution très stackoverflowy à un type de problème stackoverflowy :-) je suis allé avec la solution d'horodatage parce que je ne voulais pas avoir à changer chaque colonne chaque fois que je met à jour mon schéma –
Il existe un moyen programmatique: Modifier les structures internes par réflexion . Une fois que le modèle commence à avoir des centaines de tables, cela a du sens. – usr