No meu aplicativo móvel, tento recuperar dados de uma tabela do meu banco de dados SQL Server. Eu estou usando o EF e eu tento usar a paginação para um melhor desempenho. Eu precisa para obter dados a partir do último elemento da tabela. portanto, se a tabela tem 20 linhas, o que eu preciso, para a página 0, IDs de 20, 19, 18, 17, 16, em seguida, para a página 1 IDs de 15, 14, 13, 12, 11, e assim por diante...
O problema é: e se, enquanto o usuário "A" é a transferência de dados de tabela, o usuário "B" adicionar linha? Se o usuário "A" obter Página 0 (para IDs 20, 19, 18, 17, 16), e o usuário "B" no mesmo momento em adicionar linha (modo de IDENTIFICAÇÃO 21), com o clássico de consulta, o usuário "A" para a página 1 terá IDs 16, 15, 14, 13, 12... portanto, outra vez 16 de IDENTIFICAÇÃO
Meu código é muito simples:
int RecordsForPagination = 5;
var list = _context.NameTable
.Where(my_condition)
.OrderByDescending(my_condition_for ordering)
.Skip (RecordsForPagination * Page)
.Take (RecordsForPagination)
.ToList();
Claro Page
é int, que vêm de frontend.
Como posso resolver o problema?
Eu achei uma solução, mas eu não sei se é o ideal. Eu poderia usar
.SkipWhile(x => x.ID >= LastID)
em vez disso
.Skip (RecordsForPagination * Page)
e, claro, LastID
sempre é enviado a partir do frontend.
Você acha que o desempenho é sempre bom com esse código? Existe uma solução melhor?