使用 实体数据模型 (EDM),本组主题中描述的 HR 技能示例应用程序的映射规范将概念性架构定义语言 (CSDL) 架构中的实体和关联映射到描述用于存储应用程序数据的数据库的元数据。
有关本应用程序使用的概念性架构的信息,请参见人力资源技能 WinApp(EDM 示例应用程序)。有关存储元数据的信息,请参见 HR 技能存储元数据(EDM 示例应用程序)。
下面的映射规范语言 (MSL) 语法将在概念性架构 HRSkills
中声明的 EntityContainer 映射到数据源 dbo
。
<EntityContainerMapping CdmEntityContainer="HRSkills"
StorageEntityContainer="dbo">
名为 HRSkillsTarget 的存储元数据包含一个名称与数据库对象 dbo 对应的 EntityContainer。架构内定义的实体容器是单独的,独立于在其中定义它们的架构,分配给 CdmEntityContainer 和 StorageEntityContainer 的名称不受架构命名空间名称的限定。
此实现中的每个实体都映射到数据库中的一个表。实体包含属性,每个属性都映射到表中的一列。将在表中表示实体的键列之间映射关联。
实体使用 EntitySetMapping 语法映射到数据库表。关联使用 AssociationSetMapping 语法进行映射。有关 EntitySetMapping 和 AssociationSetMapping 的更多信息,请参见架构和映射规范(实体框架)。
下面的 EntitySetMapping 语法将概念性架构中的 Skills 实体映射到数据库中的 Skills 表,将 Skills 实体的每个属性映射到数据库中的列。
<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"
。
在 CSDL 和 SSDL 架构中都声明了 EntityContainer。映射将架构关联起来,生成过程让数据库中存储的实体可用作可编程对象。
<?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>
另请参见
概念
人力资源技能 WinApp(EDM 示例应用程序)
HR 技能存储元数据(EDM 示例应用程序)
HR 技能应用程序代码(EDM 示例应用程序)
实体数据模型类型
实体数据模型关系