SeekKit.EntityFramework
1.0.1
dotnet add package SeekKit.EntityFramework --version 1.0.1
NuGet\Install-Package SeekKit.EntityFramework -Version 1.0.1
<PackageReference Include="SeekKit.EntityFramework" Version="1.0.1" />
<PackageVersion Include="SeekKit.EntityFramework" Version="1.0.1" />
<PackageReference Include="SeekKit.EntityFramework" />
paket add SeekKit.EntityFramework --version 1.0.1
#r "nuget: SeekKit.EntityFramework, 1.0.1"
#:package SeekKit.EntityFramework@1.0.1
#addin nuget:?package=SeekKit.EntityFramework&version=1.0.1
#tool nuget:?package=SeekKit.EntityFramework&version=1.0.1
SeekKit.EntityFramework
High-performance cursor (keyset) pagination for Entity Framework Core. Constant-time page navigation on any table size — SQL Server, PostgreSQL, MySQL, Oracle, and SQLite.
Why cursor pagination?
Skip/Take (offset) pagination gets slower the deeper users page, because the
database scans and discards every preceding row. SeekKit remembers where the
last page ended and continues from that exact position with an index seek —
page 1 and page 1,000,000 cost the same.
Offset (Skip/Take) |
Cursor (SeekKit) | |
|---|---|---|
| Performance on large tables | Degrades with page depth | Constant — always fast |
| Consistency under writes | May skip/duplicate rows | Stable |
| Infinite scroll / feeds / exports | Awkward | Natural fit |
Quick start
// 1. Register (Program.cs)
builder.Services.AddSeekKit(options =>
{
options.Strategy = DatabaseStrategy.ForSqlServer(); // or ForPostgreSql(), ForMySql(), ForOracle(), ForSqlite()
options.DefaultPageSize = 20;
});
// 2. Paginate any IQueryable
public class ProductService(ISeekService seek, AppDbContext db)
{
public async Task<SeekResult<Product>> GetPageAsync(SeekRequest request)
=> await seek.SeekAsync(
db.Products.Where(p => p.IsActive),
request,
b => b.OrderByDescending(p => p.CreatedAt)
.OrderBy(p => p.Id)); // unique column last
}
The response carries opaque nextToken / previousToken values — the client
just passes them back to navigate. Bidirectional, URL-safe, no leaked keys.
Features
- Constant-time paging — no
OFFSET, purely index-driven seeks - Bidirectional navigation with opaque tokens
- Database-tuned strategies: tuple comparison,
UNION ALL, OR-predicates - Multi-column sorting with mixed directions
- Optional HMAC-SHA256 token signing (
config.UseHmacSigning(key)) - DTO projection via
result.Map(...)preserving all metadata - Extensible: custom type converters, serializers, filter strategies
- Targets .NET 8 / 9 / 10 (EF Core 8/9/10) and .NET Standard 2.1 (EF Core 5)
Links
- Documentation & examples: https://github.com/lttruc1402/SeekKit.EntityFramework
- Changelog: https://github.com/lttruc1402/SeekKit.EntityFramework/blob/master/CHANGELOG.md
- Report issues: https://github.com/lttruc1402/SeekKit.EntityFramework/issues
Licensed under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Microsoft.EntityFrameworkCore (>= 5.0.17)
- Microsoft.EntityFrameworkCore.Relational (>= 5.0.17)
- System.Collections.Immutable (>= 6.0.0)
- System.Text.Json (>= 6.0.7)
-
net10.0
- Microsoft.EntityFrameworkCore (>= 10.0.6)
- Microsoft.EntityFrameworkCore.Relational (>= 10.0.6)
-
net8.0
- Microsoft.EntityFrameworkCore (>= 8.0.16)
- Microsoft.EntityFrameworkCore.Relational (>= 8.0.16)
-
net9.0
- Microsoft.EntityFrameworkCore (>= 9.0.6)
- Microsoft.EntityFrameworkCore.Relational (>= 9.0.6)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.