複合型オブジェクト (Entity Framework)
複合型はエンティティ型の非スカラ プロパティで、これによってスカラ プロパティをエンティティ内で整理できます。エンティティと同様に、複合型はスカラ プロパティまたは他の複合型プロパティで構成されています。複合型は、親のエンティティまたは複合型がなければ存在できません。複合型にはキーがないため、Object Services で複合型オブジェクトを親オブジェクトから分離して管理することはできません。詳細については、「複合型 (EDM)」を参照してください。
Entity Framework ツールによってエンティティ型を表すオブジェクトが生成される場合、これらのオブジェクトは EntityObject を継承します。同様に、複合型に対して生成されるオブジェクトは ComplexObject を継承します。これらのクラスはどちらも StructuralObject 基本クラスを継承します。複合型オブジェクトのスカラ プロパティは、他のスカラ プロパティと同様にアクセスできます。詳細については、「複合型を使用してオブジェクト クエリを作成および実行する方法 (Entity Framework)」を参照してください。
複合型を表すオブジェクトを操作する場合は、次の点に注意してください。
複合型プロパティを null にすることはできません。SaveChanges が呼び出され、null の複合オブジェクトが検出された場合、InvalidOperationException が発生します。エンティティのスカラ プロパティと同様に、複合オブジェクトのスカラ プロパティは null にすることができます。
複合型は他の複合型を継承できません。
複合型のオブジェクト グラフ内でプロパティが変更されると、親の型のプロパティに変更が行われたことが記録され、SaveChanges が呼び出されたときに、複合型のオブジェクト グラフのすべてのプロパティが更新されます。
ComplexObject を継承する複合オブジェクトは、複合型プロパティがアクセスされたときにインスタンス化され、親オブジェクトがインスタンス化されたときはインスタンス化されません。
カスタム データ クラスが EntityObject を継承する場合、複合型クラスは ComplexObject を継承する必要があります。
IEntityWithKey などのカスタム データ クラス インターフェイスを実装する場合、複合型を使用できます。ただし、カスタム データ クラスで複合型を使用する場合は、EntityObject と ComplexObject の両方を継承することをお勧めします。詳細については、「オブジェクトのカスタマイズ (Entity Framework)」を参照してください。