複合型オブジェクト (Entity Framework)

複合型はエンティティ型の非スカラー プロパティで、これによってスカラー プロパティをエンティティ内で整理できます。 エンティティと同様に、複合型はスカラー プロパティまたは他の複合型プロパティで構成されています。 複合型にはキーがないため、Entity Framework で複合型オブジェクトを親オブジェクトから分離して管理することはできません。 詳細については、「ComplexType 要素 (CSDL)」を参照してください。

Entity Framework ツールによってエンティティ型を表すオブジェクトが生成される場合、これらのオブジェクトは EntityObject を継承します。 同様に、複合型に対して生成されるオブジェクトは ComplexObject を継承します。 これらのクラスはどちらも StructuralObject 基本クラスを継承します。 複合型オブジェクトのスカラー プロパティは、他のスカラー プロパティと同様にアクセスできます。 詳細については、「方法: 複合型をクエリする (Entity Framework)」を参照してください。

複合型を表すオブジェクトを操作する場合は、次の点に注意してください。

  • 複合型プロパティを null にすることはできません。 SaveChanges が呼び出され、null の複合オブジェクトが検出された場合、InvalidOperationException が発生します。 エンティティのスカラー プロパティと同様に、複合オブジェクトのスカラー プロパティは null にすることができます。

  • 複合型は他の複合型を継承できません。

  • 複合型のオブジェクト グラフ内でプロパティが変更されると、親の型のプロパティに変更が行われたことが記録され、SaveChanges が呼び出されたときに、複合型のオブジェクト グラフのすべてのプロパティが更新されます。

  • オブジェクト レイヤーが Entity Data Model ツールで生成された場合、複合オブジェクトは、複合型プロパティがアクセスされたときにインスタンス化され、親オブジェクトがインスタンス化されたときはインスタンス化されません。

複合型のプロパティを持つ POCO ("plain-old" CLR object) 型を使用する場合、次の点も考慮する必要があります。

  • 複合型は class として定義する必要があります。

  • 複合型のインスタンスのメンバーに対する変更は、常にスナップショットの方法によって検出されます。 詳細については、「POCO エンティティでの変更の追跡 (Entity Framework)」を参照してください。

以下の各トピックでは、複合型に関係したさまざまな作業を ADO.NET Entity Data Model デザイナーで行う方法について説明しています。

How to: Create and Modify Complex Types

How to: Add a Complex Type Property to an Entity

How to: Refactor Existing Properties into a Complex type Property

How to: Map Complex Type Properties to Table Columns

How to: Map a Function Import to a Complex Type

参照

概念

オブジェクトの使用 (Entity Framework)