Ve své mobilní aplikaci, snažím se načíst data z tabulky z mé databáze serveru SQL Server. Používám EF a zkuste použít stránkování pro lepší výkon. Potřebuji načíst data z poslední prvek tabulky. takže pokud má tabulka 20 řádků, potřebuji, pro stránku 0, Id 20, 19, 18, 17, 16 pak pro stránka 1 Id 15, 14, 13, 12, 11 a tak dále...
Problém je tento: co když, zatímco uživatel "A" stahování dat z tabulky, uživatel "B" přidat řádek? Pokud uživatel "A" získat Stránky 0 (takže Id 20, 19, 18, 17, 16), a uživatel "B" ve stejné chvíli přidat řádek (takže ID 21), s klasickým dotazu, uživatel "A" pro stránku 1 bude mít IDs 16, 15, 14, 13, 12... takže další čas, ID 16
Můj kód je velmi jednoduchý:
int RecordsForPagination = 5;
var list = _context.NameTable
.Where(my_condition)
.OrderByDescending(my_condition_for ordering)
.Skip (RecordsForPagination * Page)
.Take (RecordsForPagination)
.ToList();
Samozřejmě Page
je int, které přicházejí z rozhraní.
Jak mohu vyřešit problém?
Našel jsem řešení, ale nevím, jestli je to ideální. Hodila by
.SkipWhile(x => x.ID >= LastID)
místo
.Skip (RecordsForPagination * Page)
a samozřejmě LastID
vždy je odeslána z rozhraní.
Myslíte si, že výkon je vždy dobré s tímto kódem? Je tam lepší řešení?