Pergunta

Digamos que eu tenha uma lista de entidades (por exemplo, uma lista de itens de TODO) da qual mais de um usuário pode alterar, excluir e adicionar ao mesmo tempo.

Portanto, para manter um sincronizado listado entre todos os clientes, quero que cada cliente (baseado em Ajax) solicite alterações a cada xx segundos. Como a lista pode ficar por muito tempo, não quero fazer uma solicitação completa a cada vez, mas apenas solicitar os itens alterados (os itens podem ser atualizados, excluídos ou novos).

É possível com os serviços de dados da ADO.NET? Em caso afirmativo, como faço para implementá -lo, se eu usar a estrutura do entidade no servidor?

Eu pensei em usar o cache do ASP.NETS para armazenar alterações itens quando uma operação de alteração é enviada ao serviço de dados e ter um método Web personalizado que retornaria as mudanças mais recentes desde a última solicitação de clientes específicos (solicitações poderia ser rastreado através dos clientes Objeto de sessão asp.nets). No entanto, não tenho idéia de como indicar o estado de mudança do item individual (por exemplo, excluído ou atualizado ou inserido) no ResultSet.

Uma ótima solução também possibilitaria que o cliente solicite alterações em muitas entidades na mesma ida e volta do servidor.

Qualquer entrada será muito aprovada.

Atenciosamente, Egil.

Foi útil?

Solução

A maneira como brota em minha mente é usar um número de geração para a tabela. Dê à tabela TODO uma coluna chamada Generation e (mentalmente) associe a ela uma variável de número de geração global e persistente. (Provavelmente é melhor colocar isso em uma mesa no banco de dados).

Toda vez que uma atualização ou inserção é feita, o número da geração é incrementado e colocado na coluna do número de geração para o registro atualizado ou inserido.

Quando os registros são lidos pela primeira vez no banco de dados e colocados na página da web, o número da geração atual também é recuperado e armazenado em cache localmente (ou seja, colocado em uma variável JavaScript). As leituras subsequentes do AJAX usam uma cláusula WHERE que o filtro registra apenas com um número de geração maior que o número de geração em cache localmente. Isso garante que apenas novas atualizações e exclusão sejam recuperadas. O número de geração em cache local é atualizado.

Os exclusão são um pouco mais complicados. Uma maneira de fazer isso é para os registros excluídos da Tombstone por um período limitado, digamos 21 minutos. Você tem coluna de bits chamada Tombstone e uma coluna DateTime. Quando um registro é excluído, a coluna possui seu número de geração definido da mesma maneira que para uma inserção ou exclusão, o bit de lápide é definido e o DateTime é definido para a hora atual usando getDate (). A solicitação AJAX do cliente pode selecionar registros com o conjunto de sinalizadores Tombstone e removê -los da lista do lado do cliente. Se o cliente estiver codificado para que, após cada 20 minutos, uma página de página inteira, ou uma chamada de Ajax que obtém todos os registros, seja aplicada, um trabalho de banco de dados poderá correr a cada minuto e limpar (ou seja, excluir) os registros de Tombstones com mais de 20 anos minutos.

EDIT: Na verdade, você não precisa persistir separadamente do número de geração, você pode a função SQL Max sobre a coluna de geração.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top