エンティティ データ モデル (EDM) のアソシエーションのマッピングにより、関連するエンティティの EndProperty 要素に対応するデータ テーブル内の列が識別されます。概念スキーマ内のエンティティを関連付けるには、別のテーブルのプロパティを含む外部キー列をデータ テーブルに含める必要があります。通常、この外部キー列は、エンティティのキー プロパティに対応しています。
AssociationSetMapping は、EntityContainerMapping 要素の内部で指定します。Employee_Employee_ManagerIDAssociationSetMapping の次の宣言では、AdventureWorksHRModel 概念スキーマで定義されている AssociationSet と TypeName のマッピングを定義しています。
関連する両方のエンティティは Employee エンティティであるので、1 つのテーブルに両方のエンティティのデータが含まれます。この例の EndProperty 要素は、概念スキーマで定義されている関連する各エンティティのロールを指定し、ScalarProperty 要素は、各エンティティのプロパティおよびこのプロパティに対応する ColumnName を指定します。このアソシエーションの各 End は Employee エンティティであり、各ケースにおける識別プロパティは、Employee データ テーブルの対応する EmployeeID 列にリンクされています。条件で、2 番目の Employee の ManagerID 列に値を割り当てなければ Association は無効になることが指定されています。
<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S"
xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
<EntityContainerMapping CdmEntityContainer="HumanResources"
StorageEntityContainer="HumanResources">
<AssociationSetMapping Name="Employee_Employee_ManagerID"
TypeName="AdventureWorksHRModel.Employee_Employee_ManagerID"
StoreEntitySet="Employee">
<EndProperty Name="Employee">
<ScalarProperty Name="EmployeeID" ColumnName="ManagerID" />
</EndProperty>
<EndProperty Name="EmployeeManager">
<ScalarProperty Name="EmployeeID" ColumnName="EmployeeID" />
</EndProperty>
<Condition ColumnName="ManagerID" IsNull="false" />
</AssociationSetMapping>
</EntityContainerMapping>
この例では、AssociationSetMapping 要素は AdventureWorksHRModel スキーマの一部です。この AssociationSetMapping の HumanResourcesEntityContainerMapping 要素は、Employee_Employee_ManagerID アソシエーションをマップします。このアソシエーションは、従業員のエンティティを、マネージャとして指定されている別の従業員エンティティに関連付けます。
このマッピングは、AssociationSetMapping の最後の行で指定された Condition に左右されます。アソシエーションを有効にするには、Employee エンティティを、Employee テーブルの ManagerID 列内の外部キー値によってマネージャとして指定されている別の Employee エンティティと関連付ける必要があります。この列に値が割り当てられていない場合は条件を満たしていないので、このアソシエーションで追加の詳細を割り当てても意味がありません。ManagerID 値が Null のときにコードでこのようなアソシエーションが作成された場合は、SaveChanges メソッドの呼び出し時にアソシエーションにより例外がスローされます。
参照
概念
EntityContainerMapping 要素 (MSL)
Association 要素 (CSDL)
AssociationSet 要素 (EntityContainer CSDL)
Association 要素 (SSDL)
AssociationSet 要素 (EntityContainer SSDL)
AdventureWorks Complete Model (EDM)