1

私は EF 4.1 が公開されてから 1 年以上前に EF CodeFirst を使用してきましたが、今ではかなり快適に作業できます。私はカスタム エンティティ バリデーターに慣れており、.SaveChanges() をオーバーライドしてその動作の一部を変更したり、テーブル以外の db オブジェクトへのマッピングなどの重要な概念を変更したりしています。しかし、私には曇ったままの EF のこの部分がありますcontext.Configuration.LazyLoadingEnabled = false;

基本を理解しています.linqクエリは呼び出されるとすぐにデータベースにスローされます.依存コレクションは、明示的に指定しないとロードされません.yadda yadda yadda. 私が理解したいのは:

  • 遅延読み込みを無効にする必要があるのはどのような状況ですか? なぜ?
  • それを無効にすることの実際的な利点および/または欠点は何ですか?
  • 追加の説明は大歓迎です。
4

1 に答える 1

0

EF v1 は遅延読み込みをサポートしていませんでした。遅延読み込みが第 2 ラウンド (EF4) で追加されたとき、EF v1 で記述されたアプリを EF4 に移植するときに、以前には発生していなかったときに突然、より多くのクエリがデータベースに送信されるという問題が発生する可能性がありました。したがって、EF v1 を EF4 で動作させる最も簡単な方法は、遅延読み込みを無効にすることでした。

もう 1 つの興味深い点は、遅延読み込みがどのように実装されているかを確認することです。EF はエンティティ型から派生した型を動的に作成し、遅延読み込みを処理するコードを追加します。これは、EF が実際に型を使用しているのではなく、型から派生した型を使用していることを意味します。通常はこれで問題ありませんが、問題が発生する場合があります。

最後に、クエリが実際にデータベースに送信されるタイミングを制御したい場合があります (たとえば、Sql Azure を使用する場合の待機時間のため、多くのクエリが小さな結果を返すよりも、大きな結果を返す 1 つのクエリを送信する方が、通常はより適切で高速です)。遅延読み込みを使用すると、データベースが必要でない場合や効果的でない場合に、データベースに激しくアクセスしていることに気付かないことがよくあります。ここで、両方の世界を混在させることができることに注意してください - .Include() は、遅延読み込みの設定に関係なく、関連するエンティティを強制的に読み込みます。

詳細については、こちらをご覧ください: http://thedatafarm.com/blog/data-access/a-look-at-lazy-loading-in-ef4/およびこちら: http://msdn.microsoft.com/en -us/magazine/hh205756.aspx

于 2012-11-12T17:12:52.750 に答える