Frage

Hier kann sagen, dass ich eine Liste von Entitäten (zum Beispiel eine Liste des TODO Artikels), dass mehr als ein Benutzer ändern, löscht aus und fügen Sie zugleich zu.

So maintane eine zwischen allen Kunden aufgelistet synchronisiertes, ich jeden Kunden wollen (AJAX basiert) für Änderungen Sekunden alle xx zu fragen. Da die Liste gaaanz lange erhalten können, möchte ich nicht eine volle Anfrage jedes Mal tun, sondern nur für die geänderten Elemente stellen (Artikel aktualisiert werden können, gelöscht oder neu).

Ist es möglich, mit ADO.NET Data Services? Wenn ja, wie implementiere ich es, wenn ich auf dem Server Entity Framework verwenden?

Ich habe als ASP.NETs-Cache Änderungspositionen in zu speichern, wenn eine Änderungsoperation an den Datendienst gesendet wird, und habe eine eigene Web-Methode, die die neuesten Änderungen seit der spezifischen Kunden letzten Anfrage (Anfragen verfolgt werden könnten, würde zurückkehren durch das Sitzungsobjekt ASP.NETs Clients). Allerdings habe ich keine Ahnung, wie der Änderungszustand des einzelnen Artikels, um anzuzeigen (z gelöscht oder aktualisiert oder eingefügt) in der Ergebnismenge.

Eine große Lösung wäre es auch möglich macht für die Kunden für Veränderungen in vielen Einheiten in dem gleichen Roundtrip zum Server zu fragen.

Jeder möglicher Eingang wird viele appreaciated.

Mit freundlichen Grüßen, Egil.

War es hilfreich?

Lösung

Die Art und Weise, die mir einfällt, ist eine Generationsnummer für die Tabelle zu verwenden. Geben Sie die ToDo-Tabelle eine Spalte namens Generation und (geistig) assoziiert damit eine globale und persistent Generationsnummer variabel. (Wahrscheinlich das am besten in der DB in einer Tabelle setzen).

ein Jedes Mal, Update oder Insert gemacht wird die Erzeugung Nummer erhöht wird und in die Generationsnummer Spalte für die Aktualisierung oder eingefügt aktenkundig zu machen.

Wenn die Datensätze zuerst aus der DB gelesen werden und auf der Webseite der aktuelle Generation Nummer auch lokal abgerufen und zwischengespeichert (das heißt in ein JavaScript-Variable). Nachfolgende AJAX liest verwenden, um eine where-Klausel, welche Filter nur Datensätze mit einer Generationszahl größer ist als die lokal zwischengespeichert Generationsnummer. Dadurch wird sichergestellt, nur neue Aktualisierungen und Löschungen abgerufen werden. Die lokal gespeicherte Generationsnummer wird dann aktualisiert.

Löscht sind ein wenig komplizierter. Eine Möglichkeit, es zu tun ist, um Grabstein gelöschte Datensätze für einen begrenzten Zeitraum, sagen wir 21 Minuten. Sie haben etwas Spalte namens Grabstein und eine Datetime-Spalte. Wenn ein Datensatz gelöscht wird die Säule hat es in der gleichen Weise wie für den Einschub oder löschen, der Grabstein-Bit wird gesetzt, und die Datumzeit wird auf die aktuelle Zeit unter Verwendung GetDate () gesetzt Generationsnummer ist. Der AJAX Wunsch des Kunden kann dann wählen Sie Datensätze mit dem Grabstein-Flag gesetzt und entfernen Sie sie aus der Client-Seite Liste. Wenn der Client kodiert, so dass nach 20 Minuten eine vollständige Aktualisierung der Seite oder ein Ajax-Aufruf, dass jeder Datensatz wird, erzwungen wird dann ein DB Job jede Minute laufen und reinigen (dh löschen) die tombstoned Aufzeichnungen älter als 20 Minuten.

EDIT:. Sie brauchen eigentlich nicht getrennt, um die Generationsnummer bestehen bleiben, können Sie die SQL-Funktion MAX über die Generation Spalte

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top