AssociationSetMapping 項目 (MSL)

對應 實體資料模型 (EDM) 中的關聯會識別對應至相關實體之 EndProperty 項目的資料表資料行。如果是要產生關聯之概念結構描述中的實體,資料表中必須有外部索引鍵資料行包含另一個資料表的某個屬性。通常這個外部索引鍵資料行會對應到實體的 key 屬性。

AssociationSetMapping 會指定於 EntityContainerMapping 項目的內部。下列 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 實體與另一個 Employee 實體連接 (後者必須由 Employee 資料表中 ManagerID 資料行內的外部索引鍵值指定為經理)。如果這個資料行未指派值,就不會符合此條件,而且指派此關聯中的其他詳細資料就沒有意義。如果當 ManagerID 值為 Null 時,在程式碼中建立這種關聯,則當呼叫 SaveChanges 方法時,此關聯會擲回例外狀況。

另請參閱

概念

EntityContainerMapping 項目 (MSL)
Association 項目 (CSDL)
AssociationSet 項目 (EntityContainer CSDL)
Association 項目 (SSDL)
AssociationSet 項目 (EntityContainer SSDL)
AdventureWorks 完整模型 (EDM)