AssociationSetMapping 元素 (MSL)

在 实体数据模型 (EDM) 中映射关联将在数据表中标识对应于相关实体的 EndProperty 元素的列。对于要关联的概念架构中的实体,数据表中必须存在包含其他表的某个属性的外键列。通常此外键列对应于某实体的键属性。

AssociationSetMappingEntityContainerMapping 元素中指定。Employee_Employee_ManagerIDAssociationSetMapping 的以下声明定义 AdventureWorksHRModel 概念架构中定义的 AssociationSetTypeName 的映射。

由于两个相关的实体都是 Employee 实体,因此两个实体的数据存在于同一个表中。此示例中的 EndProperty 元素指定概念架构中定义的各相关实体的角色,ScalarProperty 元素指定各实体的属性及此属性对应的 ColumnName。此关联的两端都是 Employee 实体,两边的标识属性都链接到 Employee 数据表中相应的 EmployeeID 列。此情况要求必须为第二个 EmployeeManagerID 列赋值,否则 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 架构的一部分。此 AssociationSetMappingHumanResourcesEntityContainerMapping 元素映射 Employee_Employee_ManagerID 关联。该关联将一个员工实体关联到另一个指派为经理的员工实体。

此映射取决于 AssociationSetMapping 最后一行指定的 Condition。为使关联有效,它必须通过 Employee 表的 ManagerID 中的外键值将一个 Employee 实体连接到另一个指派为经理的 Employee 实体。如果此列没有赋值,条件不满足,在此关联中指定其他细节则没有意义。如果在代码中创建这种关联而 ManagerID 值为 Null,则该关联将在调用 SaveChanges 方法时引发异常。

另请参见

概念

EntityContainerMapping 元素 (MSL)
Association 元素 (CSDL)
AssociationSet 元素 (EntityContainer CSDL)
Association 元素 (SSDL)
AssociationSet 元素 (EntityContainer SSDL)
AdventureWorks 完整模型 (EDM)