参照に関する制約 (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 プロパティを有効にすることと同じです。
リレーションシップを削除すると、子オブジェクトが削除されます。つまり、EntityCollection の Remove を呼び出すと、リレーションシップと子オブジェクトの両方が削除の対象としてマークされます。
作成したリレーションシップは、次のプロセスによってのみ変更できます。
既存のリレーションシップを削除する。
SaveChanges を呼び出す。
永続化されている子オブジェクトを新しい親オブジェクトの EntityCollection に追加する