J'ai commencé à travailler avec linq sur SQL il y a quelques semaines. Je suis vraiment fatigué de travailler avec le serveur SQL directement à travers les requêtes SQL (sqldatareader, sqlcommand et toutes ces bonnes choses). Après avoir entendu parler de linq to SQL et de mvc, j'ai rapidement déplacé tous mes projets vers ces technologies. Je m'attendais à ce que linq to SQL fonctionne plus lentement, mais il s'est avéré très rapide, surtout parce que j'ai toujours oublié de fermer mes connexions lorsque j'utilisais des lecteurs de données. Maintenant, je n'ai pas à m'inquiéter à ce sujet.linq: Performances SQL sur les applications Web fortement chargées
Mais il y a un problème qui me dérange vraiment. Il y a une page qui est demandée des milliers de fois par jour. Le système obtient des données au début, travaille avec et les met à jour. Principalement les mises à jour sont ++ @ - (augmenter et diminuer les valeurs). Je l'habitude de le faire comme ça
UPDATE table SET valeur = valeur + 1 WHERE ID = @ Je serais
Il a travaillé sans problème évidemment. Mais avec linq to SQL, les données sont prises au début, déplacées dans la classe, modifiées puis sauvegardées.
Stats.registeredusers ++; Db.submitchanges();
Disons qu'il y avait 100 000 utilisateurs. Linq dira "laissez-le être 100 001" au lieu de "laissez-le être augmenté de 1".
Mais si la valeur des utilisateurs a déjà été augmenté (ce qui se passe dans mon site tout le temps), alors LINQ sera comme oups, cette valeur est déjà 100 001. Tout ce que je vais jeter une exception »
Vous pouvez modifier ce comportement pour qu'il ne lève pas d'exception, mais il ne définira toujours pas la valeur à 100 002.
Comme je l'ai dit, ça m'est arrivé tout le temps, la valeur de stas a été augmentée deux fois par seconde En moyenne, j'ai simplement dû réécrire ce morceau de code avec le classique ado net
Donc, ma question est comment pouvez-vous résoudre le problème avec linq
Merci! Je n'ai même pas pensé aux procédures stockées. Ils fonctionneront très bien. Et je ne connaissais pas la méthode ExecuteCommand. Je vais trouver plus d'informations sur. Ce sera très utile pour moi - bien mieux que de tout réécrire à partir de zéro avec des commandes et des connexions. – Alex