J'utilise LINQ to SQL et j'ai un peu de problème à incrémenter une interconnexion de compteurs de vues.ChangeConflictException dans les mises à jour non simultanées de Linq à Sql
Le code tantinet j'utilise est:
t = this.AppManager.ForumManager.GetThread(id);
t.Views = t.Views + 1;
this.AppManager.DB.SubmitChanges();
maintenant dans mes tests, je cours ce à plusieurs reprises, non simultanément. Il y a un total de 4 copies de l'objet effectuant ce test. C'est-à-dire, il n'y a pas de problème de verrouillage, ou quelque chose comme ça, mais il y a 4 contextes de données.
Maintenant, je m'attendrais à ce que cela fonctionne comme ceci: récupérer une ligne, modifier un champ, mettre à jour la ligne. Cependant, cela lance une ChangeConflictException.
Pourquoi la modification serait-elle en conflit si aucune de ces copies ne s'exécute en même temps?
Existe-t-il un moyen d'ignorer les conflits de modification sur une table donnée?
EDIT: trouvé la réponse:
Vous pouvez définir « UpdateCheck = Jamais » sur toutes les colonnes sur une table pour créer un dernier en gagne le style de mise à jour. C'est ce que l'application utilisait avant de le porter sur LINQ, c'est ce que je vais utiliser pour le moment.
EDIT2: Alors que ma solution ci-dessus ne fait empêcher l'exception d'être jeté, il n'a pas résolu le problème sous-jacent:
Depuis que j'ai plus d'un contexte de données, il finit par être plus d'un cache copie de chaque objet. Dois-je recréer mon contexte de données avec chaque chargement de page? Je préférerais que le contexte de données oublie tout. Est-ce possible?