コード検査: データベースに対する複数のクエリの可能性 (N+1 問題)
このインスペクションは、コレクションを反復するときに不必要なデータベース呼び出しが行われる N+1 セレクト問題を検出します。
この問題は次の例で説明できます。ここでは、Products
と Details
が 2 つのデータベーステーブルであり、各 Product
エントリが複数の Detail
エントリにリンクされています。
この問題を解決するために、ReSharper はエンティティフレームワークコアの Include
機能を使用することを提案しています。これにより、リンクされたすべての Detail
エントリが最初のクエリで直接読み込まれます。
ナビゲーションプロパティ呼び出しのチェーンが長い場合、クイックフィックスは必要に応じて ThenInclude
を追加します。
関連ページ:
![](https://resources.jetbrains.com/help/img/dotnet/2024.1/inspection_severity_change.png)
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...
![](https://pleiades.io/icons/resharper.png)
コード検査: 関連エンティティに対するデータベースへの複数のクエリの可能性 (N+1 問題)
このインスペクションは、コレクションを反復するときに不必要なデータベース呼び出しが行われる N+1 セレクト問題を検出します。この問題は次の例で説明できます。ここでは、とが 2 つのデータベーステーブルであり、各エントリが複数のエントリにリンクされています。// First DB query: get all 'Product' entries from the database var products = dbContext.Products; // Iterating 'Product' e...