POCO プロキシの作成要件 (Entity Framework)

Entity Framework は POCO クラス ("plain-old" CLR object) をサポートします。 POCO エンティティの遅延読み込みを有効にして、変更が発生したら Entity Framework でクラス内の変更を追跡するには、Entity Framework が実行時に POCO エンティティのプロキシを作成できるように、POCO クラスがこのトピックで説明する要件を満たす必要があります。 プロキシ クラスは POCO 型から派生します。

クラス定義の要件

クラスが以下に説明する要件を満たす場合、Entity Framework は POCO エンティティのプロキシを作成します。 POCO エンティティは、変更追跡または遅延読み込みをサポートするプロキシ オブジェクトを持つことができます。 変更追跡プロキシの要件を満たさなくても遅延読み込みプロキシを使用できますが、変更追跡プロキシの要件を満たしている場合は、遅延読み込みプロキシも作成されます。 遅延読み込みは LazyLoadingEnabled オプションを false に設定して無効にできます。

これらのプロキシのいずれかを作成する場合:

  • カスタム データ クラスはパブリック アクセスで宣言する必要があります。

  • カスタム データ クラスを sealed (Visual Basic の場合は NotInheritable) にしないでください。

  • カスタム データ クラスを abstract (Visual Basic の場合は MustInherit) にしないでください。

  • カスタム データ クラスにはパラメーターを持たない public または protected コンストラクターが必要です。 CreateObject メソッドを使用して POCO エンティティのプロキシを作成する場合は、パラメーターを持たない protected コンストラクターを使用します。 CreateObject メソッドを呼び出してもプロキシの作成が保証されるわけではありません。POCO クラスは、このトピックで説明する他の要件にも従う必要があります。

  • クラスは IEntityWithChangeTracker インターフェイスまたは IEntityWithRelationships インターフェイスを実装できません。これらのインターフェイスはプロキシ クラスが実装するためです。

  • ProxyCreationEnabled オプションは true に設定する必要があります。

遅延読み込みプロキシの場合:

  • 各ナビゲーション プロパティは、sealed (Visual Basic の場合は NotOverridable) get アクセサーではなく、publicvirtual (Visual Basic の場合は Overridable) として宣言する必要があります。 カスタム データ クラスで定義されているナビゲーション プロパティは、概念モデル内に対応するナビゲーション プロパティが存在する必要があります。 詳細については、「関連 POCO エンティティの読み込み (Entity Framework)」を参照してください。

変更追跡プロキシの場合:

  • データ モデルでエンティティ型のプロパティにマップされる各プロパティには、シールされていない (Visual Basic の場合は NotOverridable)、public、および virtual (Visual Basic の場合は Overridable) get アクセサーおよび set アクセサーが必要です。

  • リレーションシップの "多" の End を表すナビゲーション プロパティは、ICollection を実装する型を返す必要があります。ここで T はリレーションシップのもう一方の End にあるオブジェクトの型です。

  • プロキシ型をオブジェクトと共に作成する場合は、new 演算子の代わりに、新しいオブジェクトを作成するときに ObjectContextCreateObject メソッドを使用します。

実行中に POCO エンティティがプロキシかどうかを知る必要がある場合は、「方法: POCO エンティティがプロキシであることを識別する (Entity Framework)」で説明する手順に従います。

参照

処理手順

チュートリアル: WCF による POCO プロキシのシリアル化 (Entity Framework)

概念

POCO エンティティの使用 (Entity Framework)
POCO エンティティでの変更の追跡 (Entity Framework)