1. ホーム
  2. entity-framework-4

[解決済み】Entity Framework 4.1 POCO Code Firstでvirtualキーワードはどのような効果を持つことができますか?

2022-04-03 11:08:33

質問

を使用していますか? virtual キーワードは、EF Code Firstのプロパティで使用された場合、効果がありますか?誰か、さまざまな状況におけるその影響のすべてを説明することができますか?

例えば、以下のような制御ができることは知っています。 レイジーローディング -- ICollection/one-to-many リレーションシップのプロパティで virtual キーワードを使用すると、デフォルトで遅延ロードされ、 virtual キーワードを省略すると、イーガーロードされます。

他にどのような効果があるのでしょうか? virtual キーワードは、EFでPOCOエンティティを使用する際にどのような効果がありますか?を使用することをデフォルトにする必要がありますか? virtual をすべてのプロパティで使用するか、使用しないようにするか?

解決方法は?

今のところ、こんな効果を知っています。

  • レイジーローディング : 任意 virtual ICollections は、特に指定しない限り、レイジーロードされます。
  • より効率的な変更追跡 . 以下の要件をすべて満たす場合、仮想プロパティをフックすることで、変更追跡をより効率的な方法で行うことができます。 リンク先から

    <ブロッククオート

    変更追跡プロキシを取得するためには 基本的なルールは、クラスが public、non-abstract、non-sealedのいずれかを選択します。 また、クラスはパブリックな 仮想ゲッター/セッター プロパティが永続化されます。 最後に、コレクションを宣言する必要があります。 ベースリレーションシップナビゲーション プロパティは ICollection<T> のみです。 これらは具体的な 実装または他のインターフェース から派生したもので ICollection<T> (a Deferred Loading との違い プロキシ)

このことを説明したもう一つの有用なリンクは、MSDNの POCOプロキシを作成するための必要条件 .