2016-10-11 8 views
0

EFコードが最初に「Association properties that are marked as “virtual” will by default be lazy-loaded」です。Entity Framework:なぜ "仮想"がデフォルトで遅延ロードされるのですか?

これは慣習であるのか、これには論理がありますか?

+0

:コンテキストのための遅延ロードを無効にするには、例えば

:これは(上記のリンクを参照)は、単にコンテキストのため、または個々のエンティティのための遅延ロードをオフにすることで無効にすることができます仮想メソッドで? https://msdn.microsoft.com/en-GB/library/9fkccyh4.aspx – Basic

+0

はい、もちろんですか? –

+0

申し訳ありませんが、私はそれが明らかだと思いました... EFはプロキシクラスを使用して状態を追跡し、他の魔法を行います。 Virtualプロパティを作成することで、ロードをトリガーするプロパティにカスタム実装を追加することができます。 'virtualキーワードは、メソッド、プロパティ、インデクサ、またはイベント宣言を変更し、それを派生クラスでオーバーライドできるようにするために使用されます。 ' – Basic

答えて

1

仮想としてプロパティをマークすることで、EFは派生したプロキシクラスでそのプロパティをオーバーライドして、オブジェクトを囲みます。これにより、EFはオーバーライドされたプロパティにロードフックを追加し、遅延ロードの動作を可能にします。

Microsoftのドキュメント:https://msdn.microsoft.com/en-us/data/jj574232.aspx

デフォルトEntity Frameworkの動作は、遅延ロードreleatedオブジェクトに、可能な場合、です。あなたは、ドキュメントを読んだ

this.Configuration.LazyLoadingEnabled = false; 
+0

これは規約です...論理的な説明がありますが、EFはこのようにしか動作しないためです。お役立ち情報... –

関連する問題