Entity-framework-lazy-loading
提供:Dev Guides
Entity Framework-遅延読み込み
遅延読み込みとは、エンティティを参照するプロパティに最初にアクセスしたときに、エンティティまたはエンティティのコレクションがデータベースから自動的に読み込まれるプロセスです。 遅延読み込みとは、特に要求するまで、関連データの読み込みを遅らせることです。
- POCOエンティティタイプを使用する場合、派生プロキシタイプのインスタンスを作成し、仮想プロパティをオーバーライドしてロードフックを追加することにより、遅延ロードが実現されます。
- 遅延読み込みはほとんどデフォルトです。
- 既定の構成をそのままにして、遅延ロード以外の何かが必要であることをクエリでEntity Frameworkに明示的に指定しない場合、遅延ロードが得られます。
- たとえば、Studentエンティティクラスを使用する場合、Enrollmentsナビゲーションプロパティに最初にアクセスすると、関連するEnrollmentsがロードされます。
- ナビゲーションプロパティは、パブリック、仮想として定義する必要があります。 プロパティが仮想として定義されていない場合、コンテキストは遅延読み込みを実行しません。
以下は、Enrollmentsのナビゲーションプロパティを含むStudentクラスです。
最初に学生リストがデータベースからロードされ、次に必要なときに特定の学生の登録がロードされる単純な例を見てみましょう。
上記のコードをコンパイルして実行すると、次の出力が表示されます。
遅延読み込みをオフにする
遅延読み込みとシリアル化はうまく混ざりません。注意しないと、遅延読み込みが有効になっているからといって、データベース全体をクエリすることになります。 エンティティをシリアル化する前に、遅延読み込みをオフにすることをお勧めします。
特定のナビゲーションプロパティをオフにする
次の例に示すように、Enrollmentsプロパティを非仮想にすることで、Enrollmentsコレクションの遅延読み込みをオフにできます。
すべてのエンティティに対してオフにする
次の例に示すように、Configurationプロパティのフラグをfalseに設定することにより、コンテキスト内のすべてのエンティティの遅延読み込みをオフにできます。
遅延読み込みをオフにした後、上記の例を再度実行すると、登録が読み込まれず、学生データのみが取得されることがわかります。
理解を深めるために、上記の例を段階的に実行することをお勧めします。