C# | EF Core 8 を使用したページネーションのベスト プラクティス

WBOY
リリース: 2024-07-24 09:56:46
オリジナル
498 人が閲覧しました

C# | Best Practices for Pagination using EF Core 8

ページネーションは、特に大規模なデータセットを扱う場合、アプリケーション開発の重要な側面です。 C# の Entity Framework (EF) Core 8 は、効率的なページネーションを実装するための強力な機能を提供します。このガイドでは、EF Core 8 を使用してページネーションを実装するためのベスト プラクティスを例とともに説明します。

1. 単純なページネーションにはスキップとテイクを使用する

EF Core は、ページネーションを効率的に実装するために不可欠な Skip メソッドと Take メソッドを提供します。 Skip を使用すると、指定した行数をスキップできます。Take を使用すると、返される行の数が制限されます。

var pageNumber = 1;
var pageSize = 10;

var result = dbContext.YourEntity
    .OrderBy(e => e.SortingProperty)
    .Skip((pageNumber - 1) * pageSize)
    .Take(pageSize)
    .ToList();
ログイン後にコピー

この例では、pageNumber と pageSize によって現在のページとページごとの項目数がそれぞれ決まります。

2. 読み取り専用操作には AsNoTracking を使用する

表示目的のデータ取得などの読み取り専用操作の場合は、変更追跡のオーバーヘッドを回避してパフォーマンスを向上させるために AsNoTracking の使用を検討してください。

var result = dbContext.YourEntity
    .AsNoTracking()
    .OrderBy(e => e.SortingProperty)
    .Skip((pageNumber - 1) * pageSize)
    .Take(pageSize)
    .ToList();
ログイン後にコピー

これは、取得したエンティティを更新したり変更を保存したりする予定がない場合に特に便利です。

3. インデックス付き列をソートに活用する

並べ替えに使用される列にインデックスが付けられていることを確認してください。インデックス付き列により、並べ替え操作のパフォーマンスが大幅に向上します。

// Ensure SortingProperty is indexed
modelBuilder.Entity<YourEntity>()
    .HasIndex(e => e.SortingProperty);
ログイン後にコピー

列のインデックスが効率的に作成されると、並べ替えが高速化され、全体的なページネーションのパフォーマンスが向上します。

4. 総レコード数の使用数

すべてのデータを取得せずにレコードの総数を決定するには、ページネーションを適用する前に Count を使用します。これにより、不要なデータのロードが回避されます。

var totalRecords = dbContext.YourEntity.Count();
var result = dbContext.YourEntity
    .OrderBy(e => e.SortingProperty)
    .Skip((pageNumber - 1) * pageSize)
    .Take(pageSize)
    .ToList();
ログイン後にコピー

5. テイクとスキップによる同時変更の処理

データが同時に変更される可能性があるシナリオでページネーションにスキップとテイクを使用する場合は注意してください。このような場合、一貫性を高めるためにキーセットのページネーションなどの代替方法を使用することを検討してください。

次は何?

ページネーションを効率的に実装することは、大規模なデータセットを扱うアプリケーションのパフォーマンスを向上させるために非常に重要です。これらのベスト プラクティスに従うことで、C# で EF Core 8 を使用するときにページネーション ロジックが最適化され、スケーラブルであることを確認できます。

以上がC# | EF Core 8 を使用したページネーションのベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート