遅延読み込みについて話すときは、ナビゲーション プロパティ (外部キーを追跡する方法) について話しています。遅延読み込みが行うことは、エンティティへのアクセスを試みるときに、リモート テーブルからエンティティにデータを入力することです。たとえば、このようなモデルがある場合
public class TestEntity
{
public int Id{get;set;}
public AnotherEntity RemoteEntity{get;set;}
}
そして、以下を呼び出します
var something = WhateverContext.TestEntities.First().RemoteEntity;
1 つはリモート エンティティをロードするためのものでWhateverContext.TestEntities.First()
、もう 1 つはリモート エンティティをロードするためのものです。
私は Web 担当者 (より具体的には MVC 担当者) であり、Web に関しては、これを実行する正当な理由はないと思います。必要な場合、1 つのデータベース呼び出しは常に 2 回よりも高速になります同じデータセット。
遅延読み込みが実際に検討する価値があると私が考える状況は、2 番目のエンティティが必要になるかどうか、最初のクエリをいつ実行するかわからない場合です。私の意見では、これは (ユーザーがページ全体を一度に要求しているステートレス MVC ではなく) リアルタイムでアクションを実行しているユーザーがいる Windows アプリケーションにはるかに関連しています。たとえば、詳細リンクを含むデータのリストがある場合、遅延読み込みが優れていると思います。その後、ユーザーが詳細を表示することを決定するまで、詳細を読み込みません。
これがページング、並べ替え、フィルタリングに及ぶとは思いません。IMO では、表示しているデータのページごとに 1 つの特別に細工されたデータベース クエリが必要であり、そのページを表示するために必要なデータ セットを正確に返します。
パフォーマンスの質問に関しては、EF (または別の ORM) がおそらくここでのニーズを満たすことができると思いますが、EF がエンティティを追跡する方法のために、大規模なデータセットを取得する方法に注意する必要があります。私のEF パフォーマンス チューニング チート シートを確認し、大規模なクエリで EF を使用することに決めた場合は、 DetectChangesとAsNoTrackingを読んでください。