このトピック グループで説明されている HR Skills サンプル アプリケーションのマッピング スキーマは、エンティティ データ モデル (EDM) を使用して、アプリケーションのデータを保存するために使用されるデータベースを記述したメタデータに、概念スキーマ定義言語 (CSDL) スキーマ内のエンティティとアソシエーションをマップします。
このアプリケーションで使用される概念スキーマについては、「Human Resources Skills WinApp (EDM サンプル アプリケーション)」を参照してください。ストレージ メタデータについては、「HR Skills ストレージ メタデータ (EDM サンプル アプリケーション)」を参照してください。
次のマッピング スキーマ言語 (MSL) 構文は、概念スキーマ HRSkills で宣言された EntityContainer をデータ ソース dbo にマッピングします。
<EntityContainerMapping CdmEntityContainer="HRSkills"
StorageEntityContainer="dbo">
HRSkillsTarget というストレージ メタデータには、データベース オブジェクト dbo に対応する名前が付けられた EntityContainer が含まれます。スキーマ内で定義されたエンティティ コンテナは、それらが定義されたスキーマとは別個に独立したもので、CdmEntityContainer および StorageEntityContainer に割り当てられる名前には、スキーマの名前空間名による修飾が使用されません。
この実装の各エンティティは、データベース内のテーブルにマップされます。エンティティにはプロパティがあり、各プロパティはテーブル内の 1 つの列にマップされます。アソシエーションは、テーブル内でエンティティを表すキー列とキー列の間でマップされます。
エンティティは、EntitySetMapping 構文を使用して、データベース テーブルにマップされます。アソシエーションは、AssociationSetMapping 構文を使用してマップされます。EntitySetMapping および AssociationSetMapping の詳細については、「スキーマおよびマッピング スキーマ (Entity Framework)」を参照してください。
次の EntitySetMapping 構文は、概念スキーマ内の Skills エンティティをデータベース内の Skills テーブルにマップし、Skills エンティティの各プロパティをデータベース内の 1 つの列にマップします。
<EntitySetMapping Name="Skills">
<EntityTypeMapping
TypeName="IsTypeOf(HRSkillsModel.Skills)">
<MappingFragment StoreEntitySet="Skills">
<ScalarProperty Name="SkillId" ColumnName="SkillId" />
<ScalarProperty Name="SkillName" ColumnName="SkillName" />
<ScalarProperty Name="BriefDescription"
ColumnName="BriefDescription" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
次の AssociationSetMapping 構文は、Skills と SkillInfo エンティティの間のアソシエーションのマッピングを定義します。まず、AssociationSetMapping が、その宣言された名前 SkillInfo_Skill によって Skills および SkillInfo エンティティの間で定義されているアソシエーションを識別します。次に、CSDL ファイル内で定義されたエンティティ edm:TypeName="SkillInfo_Skill" が識別されます。その後、構文 edm:TableName="SkillInfo"> によって、メタデータ スキーマ内のテーブル名が CSDL ファイルに関連付けられます。
アソシエーションの End プロパティは、概念スキーマ内のエンティティとプロパティに関連付けられたデータベース内の列とそのテーブルの両方を指定します。たとえば、Skills エンティティは、Skills テーブルの SkillId 列を使用して、アソシエーションの End にあるエンティティ インスタンスを識別します。構文には、ColumnName に関連付けられた ScalarProperty が含まれています。
<AssociationSetMapping Name="SkillInfo_Skill"
TypeName="HRSkillsModel.SkillInfo_Skill" StoreEntitySet="SkillInfo">
<EndProperty Name="Skills">
<ScalarProperty Name="SkillId" ColumnName="SkillId" />
</EndProperty>
<EndProperty Name="SkillInfo">
<ScalarProperty Name="SkillInfoId"
ColumnName="SkillInfoId" />
</EndProperty>
</AssociationSetMapping>
マッピング スキーマ
次の構文は、完全なマッピング スキーマを示します。EntityContainerMapping タグの構文は、名前空間およびクラス edm:CdmEntityContainer="HRSkillsModel.HRSkills" の両方を指定します。これは、データベース オブジェクト dbo: edm:StorageEntityContainer="HRSkillsTarget.dbo" にマップされます。
EntityContainer は、CSDL および SSDL の両方のスキーマで宣言されます。マッピングによって、複数のスキーマが関連付けられ、ビルド プロセスによって、データベースに格納されているエンティティがプログラム可能なオブジェクトとして使用可能になります。
<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S"
xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
<EntityContainerMapping StorageEntityContainer="dbo"
CdmEntityContainer="HRSkills">
<EntitySetMapping Name="Employees">
<EntityTypeMapping TypeName="IsTypeOf(HRSkillsModel.Employees)">
<MappingFragment StoreEntitySet="Employees">
<ScalarProperty Name="EmployeeId"
ColumnName="EmployeeId" />
<ScalarProperty Name="LastName" ColumnName="LastName" />
<ScalarProperty Name="FirstName" ColumnName="FirstName" />
<ScalarProperty Name="Alias" ColumnName="Alias" />
<ScalarProperty Name="Email" ColumnName="Email" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="References">
<EntityTypeMapping
TypeName="IsTypeOf(HRSkillsModel.References)">
<MappingFragment StoreEntitySet="References">
<ScalarProperty Name="ReferenceId"
ColumnName="ReferenceId" />
<ScalarProperty Name="LastName" ColumnName="LastName" />
<ScalarProperty Name="FirstName" ColumnName="FirstName" />
<ScalarProperty Name="Position" ColumnName="Position" />
<ScalarProperty Name="Alias" ColumnName="Alias" />
<ScalarProperty Name="Email" ColumnName="Email" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="SkillInfo">
<EntityTypeMapping
TypeName="IsTypeOf(HRSkillsModel.SkillInfo)">
<MappingFragment StoreEntitySet="SkillInfo">
<ScalarProperty Name="SkillInfoId"
ColumnName="SkillInfoId" />
<ScalarProperty Name="URL" ColumnName="URL" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="Skills">
<EntityTypeMapping
TypeName="IsTypeOf(HRSkillsModel.Skills)">
<MappingFragment StoreEntitySet="Skills">
<ScalarProperty Name="SkillId" ColumnName="SkillId" />
<ScalarProperty Name="SkillName" ColumnName="SkillName" />
<ScalarProperty Name="BriefDescription"
ColumnName="BriefDescription" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<AssociationSetMapping Name="Reference_Employee"
TypeName="HRSkillsModel.Reference_Employee" StoreEntitySet="References">
<EndProperty Name="Employees">
<ScalarProperty Name="EmployeeId" ColumnName="EmployeeId" />
</EndProperty>
<EndProperty Name="References">
<ScalarProperty Name="ReferenceId"
ColumnName="ReferenceId" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="Skill_Employee"
TypeName="HRSkillsModel.Skill_Employee" StoreEntitySet="Skills">
<EndProperty Name="Employees">
<ScalarProperty Name="EmployeeId" ColumnName="EmployeeId" />
</EndProperty>
<EndProperty Name="Skills">
<ScalarProperty Name="SkillId" ColumnName="SkillId" />
</EndProperty>
</AssociationSetMapping>
<AssociationSetMapping Name="SkillInfo_Skill"
TypeName="HRSkillsModel.SkillInfo_Skill" StoreEntitySet="SkillInfo">
<EndProperty Name="Skills">
<ScalarProperty Name="SkillId" ColumnName="SkillId" />
</EndProperty>
<EndProperty Name="SkillInfo">
<ScalarProperty Name="SkillInfoId"
ColumnName="SkillInfoId" />
</EndProperty>
</AssociationSetMapping>
</EntityContainerMapping>
</Mapping>
参照
概念
Human Resources Skills WinApp (EDM サンプル アプリケーション)
HR Skills ストレージ メタデータ (EDM サンプル アプリケーション)
HR Skills アプリケーション コード (EDM サンプル アプリケーション)
Entity Data Model の型
Entity Data Model のリレーションシップ