15

ナビゲーションプロパティを宣言するときに「virtual」キーワードを使用する必要があるのはなぜですか?コードファーストフレームワークは、プロパティがナビゲーションプロパティであることを認識するために何らかの方法でそれを使用することを理解していますが、その方法を知りたいです。具体的には、MSDNドキュメントの「virtual」キーワードの説明とどのように関連しているかを知りたいです。http: //msdn.microsoft.com/en-us/library/9fkccyh4( v = vs.80) .aspx

4

2 に答える 2

13

実行時に、EntityFrameworkはプロキシエンティティと呼ばれるものを生成します。これらのエンティティは、エンティティタイプから派生した動的に作成されたタイプのオブジェクトです。

これにより、エンティティをPOCOとして使用できます。これは、から継承されないため、EntityFrameworkとはまったく関係のない単純なオブジェクトですEntityObject

実行時に、動的に作成されたエンティティタイプはPOCOから継承し、すべての仮想プロパティをオーバーライドして、プロパティゲッターでの遅延読み込みを可能にするEntityFrameworkのものを追加します。

遅延読み込みは複雑なプロセスであり、データがデータベースからどのように取得されるかをコードが認識している必要があります。ドメインクラスにデータベースとEFのものについて知られたくないので、EFからエンティティを抽象化し、仮想プロパティを追加します。これにより、EFはベースPOCOをオーバーライドし、実行時にDB関連のものを追加できます。

変更の追跡についても同じです。

于 2013-01-14T15:59:20.990 に答える
1

追加virtualすると、EFは、プロパティをオーバーライドしてデータベースからセットを返す派生クラスを生成できます。

于 2013-01-14T15:14:06.170 に答える