参照に関する制約 (Entity Framework)

Entity Data Model (EDM) では、参照に関する制約は、SalesOrderHeader オブジェクトと SalesOrderDetail オブジェクト間など、関連するオブジェクト間に存在することができます。これらの制約は、概念スキーマ定義言語 (CSDL) ファイルで指定します。詳細については、「ReferentialConstraint 要素 (EntityContainer CSDL)」を参照してください。

[!メモ]

Object Services では、EDM で表現できるすべての制約が適用されるわけではありません。たとえば、Object Services はリレーションシップに対して基数制約は適用されません。そのため、関連オブジェクトへの変更をデータ ソースに保存した場合、結果から一貫性が失われることがあります。重要なモデル制約はすべて、データ ソースで適用するようにしてください。

制約されたリレーションシップを持つオブジェクトを操作する場合は、次の点に注意してください。

  • 依存 (子) オブジェクトは、親オブジェクトとのリレーションシップの定義なしでは存在できません。

  • 新しい子オブジェクトを作成する場合は、SaveChanges を呼び出す前に、親オブジェクトがオブジェクト コンテキストまたはデータ ソース内に存在する必要があります。そうしないと、InvalidOperationException が発生します。

  • 親オブジェクトの EntityCollection に子オブジェクトを追加するには、Add メソッドを使用します。子オブジェクトのコレクションには、リレーションシップに対して定義されているナビゲーション プロパティからアクセスするか、親オブジェクトの RelationshipManager プロパティの GetRelatedEnd メソッドまたは GetRelatedCollection メソッドからアクセスします。

  • 親オブジェクトを削除すると、制約されたリレーションシップの子オブジェクトもすべて削除されます。この結果は、リレーションシップに対するアソシエーションの CascadeDelete プロパティを有効にすることと同じです。

  • リレーションシップを削除すると、子オブジェクトが削除されます。つまり、EntityCollectionRemove を呼び出すと、リレーションシップと子オブジェクトの両方が削除の対象としてマークされます。

  • 作成したリレーションシップは、次のプロセスによってのみ変更できます。

    1. 既存のリレーションシップを削除する。

    2. SaveChanges を呼び出す。

    3. 永続化されている子オブジェクトを新しい親オブジェクトの EntityCollection に追加する

参照

その他のリソース

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