9


2

暗黙的遅延読み込みと明示的遅延読み込み

私はEntity Frameworkを読んでいますが、人々は暗黙の遅延読み込みなどが存在しない理由について泣いていました。 基本的に、私は遅延読み込みについて調べていましたが、今ではそれが何であるかを知っています。それは、本当に必要なときにオブジェクトを読み込むことができる設計パターンです。

しかし、*明示的な*遅延読み込みと*暗黙的な遅延読み込みの違いは何ですか?

前もって感謝します…​

2 Answer


5


もしあなたが エンティティ "OrderRow"と別のエンティティ "Order"がある場合、OrderRowには、所属するOrderを指す_navigational property_があります。

現在、Entity Frameworkは* Explicit * Lazy Loadのみをサポートしています。つまり、多数のOrderRowを取得し、Orderで何かを確認する必要がある場合は、次のことを行う必要があります。

// or is an OrderRow
if(!or.Order.IsLoaded)
    or.Order.Load()

or.Order.Cancel();

ただし、暗黙的な遅延ロードがある場合、IsLoadedチェックは必要ありません。自動的に実行され、 `or.Order.Cancel()`を直接実行でき、必要に応じてOrderが自動的にロードされます。 これがlinq-to-sqlの仕組みであり、入力ミスやミスのリスクを軽減します。 一方、データベースアクセスがいつ、どのように実行されるかは明確ではありません。 暗黙的なロードを使用すると、テーブルからフェッチする行ごとに1つのDBラウンドトリップを行う非効率的なコードを簡単に作成できます。


4


明示的とは、コードを遅延ロードに明示的に記述したことを意味します。

暗黙的とは、意図するかどうかにかかわらず、フレームワーク(この場合はEF)が遅延読み込みを行うことを意味します。