Question

Disons que j'ai des listes d'entités (par exemple, une liste d'éléments TODO) que plus d'un utilisateur peut modifier, supprimer et ajouter en même temps.

Donc, pour maintane un entre tous énumérés synchronisée les clients, je veux chaque client (AJAX basée) pour demander des changements tous les xx secondes. Étant donné que la liste peut se trèèès longtemps, je ne veux pas faire une demande complète à chaque fois, mais seulement pour demander les éléments modifiés (les éléments peuvent être mis à jour, supprimé ou nouveau).

Est-il possible avec ADO.NET Data Services? Si oui, comment puis-je mettre en œuvre, si j'utilise Entity Framework sur le serveur?

Je l'ai envisagé d'utiliser le cache ASP.NETs pour stocker des éléments de changement dans lorsqu'une opération de changement est soumis au service de données, et une méthode Web personnalisée qui renverrait les dernières modifications depuis les clients spécifiques dernière demande (les demandes pourraient être suivis par l'objet de la session des clients). Cependant, je ne sais pas comment indiquer l'état de changement de l'élément individuel (par exemple supprimé ou mis à jour ou inséré) dans le resultset.

Une grande solution serait également possible pour le client de demander des changements dans de nombreuses entités dans le même aller-retour au serveur.

Toute entrée sera beaucoup appreaciated.

Cordialement, Egil.

Était-ce utile?

La solution

La façon qui me vient à l'esprit est d'utiliser un numéro de génération pour la table. Donnez la table TODO une colonne appelée génération et associé (mentalement) avec une variable de numéro de génération mondiale et persistante. (Probablement préférable de mettre cela dans une table dans la base de données).

Chaque fois qu'une mise à jour ou insert est réalisé le numéro de génération est incrémenté et placé dans la colonne de numéro de génération de l'enregistrement mis à jour ou inséré.

Lorsque les enregistrements sont d'abord lues à partir de la base de données et de mettre sur la page Web le numéro de génération est également récupérée et mises en cache localement (par exemple mettre dans une variable JavaScript). lit entraîné AJAX ultérieure utiliser une clause where qui filtre uniquement les enregistrements avec un numéro de génération supérieur au nombre de génération mis en cache localement. Cela garantit que de nouvelles mises à jour et les suppressions sont récupérées. Le numéro de génération mis en cache localement est alors mis à jour.

Les suppressions sont un peu plus compliqué. Une façon de le faire est d'enregistrements supprimés de pierre tombale pour une période limitée, soit 21 minutes. Vous avez colonne de bits appelé pierre tombale et une colonne datetime. Lorsqu'un enregistrement est supprimé la colonne a son numéro de génération mis de la même manière que pour une insertion ou de suppression, le bit de pierre tombale est définie et le datetime est réglée à l'heure actuelle à l'aide GetDate (). La requête AJAX du client peut alors sélectionner des enregistrements avec le drapeau de la pierre tombale et les retirer de la liste côté client. Si le client est codé de telle sorte que toutes les 20 minutes un de rafraîchissement de la page complète, ou un appel ajax qui obtient chaque enregistrement, est appliqué alors un travail de DB peut exécuter toutes les minutes et nettoyer (c.-à supprimer) les enregistrements tombstone plus de 20 minutes.

EDIT:. Vous n'avez pas réellement besoin de persister séparément le numéro de génération, vous pouvez la fonction SQL MAX sur la colonne de génération

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top