Pregunta

Digamos que tengo unas listas de entidades (por ejemplo, una lista de los elementos TODO) que más de un usuario puede cambiar, borrar y añadir a partir de, al mismo tiempo.

Así que para una transferencia sincronizada maintane enumeran entre todos los clientes, quiero que cada cliente (basado en AJAX) para pedir cambios cada xx segundos. Dado que la lista puede llegar muuuy larga, no quiero hacer una solicitud completa cada vez, pero sólo pido los artículos modificados (artículos se pueden actualizar, eliminar o nuevo).

¿Es posible con ADO.NET Data Services? Si es así, ¿cómo ponerlo en práctica, si uso de Entity Framework en el servidor?

He considerado el uso de caché ASP.NETs para almacenar elementos de cambio en el momento de presentar una operación de cambio al servicio de datos, y tener un método web a medida que devolvería los últimos cambios desde la última petición clientes específicos (solicitudes podrían ser rastreados ASP.NETs través de los clientes objeto de sesión). Sin embargo, no tengo ni idea de lo que indique el cambio de estado del elemento individual (por ejemplo, eliminado o actualizado o insertado) en el conjunto de resultados.

Una gran solución sería también hacen que sea posible para el cliente para solicitar cambios en muchas entidades en el mismo ida y vuelta al servidor.

Cualquier entrada será mucho appreaciated.

Saludos, Egil.

¿Fue útil?

Solución

La forma en que me viene a la mente es el uso de un número de generación de la tabla. Dar la tabla TODO una generación columna llamada y asociarse (mentalmente) con un número variable de generación global y persistente. (Probablemente la mejor manera de poner esto en una tabla en la base de datos).

Cada vez que se hace una actualización o inserción del número de generación se incrementa y se coloca en la columna el número de generación para el registro actualizado o insertado.

Cuando los registros se leen en primer lugar de la base de datos y poner en la página web el número de generación actual también se recupera y se almacena localmente (es decir, poner en una variable de JavaScript). Con posterioridad AJAX impulsado lee utilizar una cláusula where que filtran sólo registros con un número de generación mayor que el número de generación caché local. Esto garantiza que sólo las nuevas actualizaciones y eliminaciones se recuperan. El número de generación en caché local se actualiza a continuación.

Elimina son un poco más complejo. Una forma de hacerlo es a registros de objetos de desecho eliminado por un período limitado, dicen 21 minutos. Tiene poco columna llamada lápida y una columna de fecha y hora. Cuando se elimina un registro de la columna tiene su número de generación situado en la misma forma que para una inserción o eliminar, el bit se establece lápida, y la fecha y hora se establece en la hora actual usando GetDate (). petición AJAX del cliente puede seleccionar registros con el indicador lápida y eliminarlos de la lista del lado del cliente. Si el cliente está codificado para que después de cada 20 minutos una actualización de la página completa, o una llamada AJAX que obtiene todos y cada registro, se hace cumplir a continuación un trabajo DB puede ejecutar cada minuto y limpiar (es decir, eliminar) los registros desechados mayores de 20 minutos.

EDIT:. En realidad no es necesario persistir por separado el número de generación, puede la función MAX SQL sobre la columna de generación

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top