2008-12-18 4 views
3

J'ai une table de base de données appelée "Posts" qui stocke toutes les informations concernant la soumission d'un article sur un site Web. Il y a une colonne nommée "Vues" qui est une valeur qui s'incrémente chaque fois que cette publication est vue.Mise à jour du nombre de vues d'une page Web dans une base de données

Le processus est le suivant:

  1. Obtenir l'enregistrement de la base de données
  2. Incrémenter le courant par un
  3. Enregistrer les modifications apportées à la base de données.

Assez simple. Mon souci est que si plusieurs personnes cliquent sur le lien en même temps, les mises à jour ne seront pas exactes. Comment dois-je aborder cela? Cela devrait-il être fait dans une procédure stockée?

/// <summary> 
    /// Updates the view count of a post. 
    /// </summary> 
    /// <param name="postId">The Id of the post to update</param> 
    public bool UpdateViewCount(int postId) 
    { 
     Repository repository = new Repository(); 
     Post p = repository.Posts.Where(p => p.Id == postId).SingleOrDefault(); 
     if (p != null) 
     { 
      p.Views++; 
     } 
     repository.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict); 
    } 

Répondre

6

Faites-en une seule fois:

UPDATE table SET views=views+1 WHERE myId=12; 
+0

Donc je ne devrais pas le faire en code? Est-il préférable d'être un sproc? – Micah

+0

Je n'ai jamais su que tu pouvais faire ça. Merci! – stalepretzel

Questions connexes