V mojom mobile app, snažím získavať údaje z tabuľky, z mojej databázy servera SQL Server. Ja používam EF a snažím sa používať celkové počty strán pre lepší výkon. Potrebujem na načítanie údajov z posledného prvku v tabuľke. takže ak má tabuľka 20 riadkov, potrebujem, pre stránky, 0, Id 20, 19, 18, 17, 16 potom na strane 1 Id 15, 14, 13, 12, 11 a tak ďalej...
Problém je v tomto: to, čo v prípade, keď užívateľ "A" je sťahovanie údajov z tabuľky, používateľ "B" pridať riadok? Ak sa užívateľ "A" získať Stránku 0 (takže Id 20, 19, 18, 17, 16), a užívateľ "B" v istom okamihu pridať riadok (tak, ID 21), s klasickými dopyt používateľa "A" na stránke 1 dostane Id 16, 15, 14, 13, 12... takže ďalší čas ID 16
Môj kód je veľmi jednoduchý:
int RecordsForPagination = 5;
var list = _context.NameTable
.Where(my_condition)
.OrderByDescending(my_condition_for ordering)
.Skip (RecordsForPagination * Page)
.Take (RecordsForPagination)
.ToList();
Samozrejme Page
je int, ktoré pochádzajú z frontend.
Ako to môžem vyriešiť problém?
Našiel som riešenie, ale neviem, či je to dokonalé. Mohol by som použiť
.SkipWhile(x => x.ID >= LastID)
namiesto
.Skip (RecordsForPagination * Page)
a samozrejme LastID
vždy je odoslaná z frontendu.
Myslíte si, že výkon je vždy dobré s týmto kódom? Existuje lepšie riešenie?