AssociationSetMapping 項目 (MSL)
對應 實體資料模型 (EDM) 中的關聯會識別對應至相關實體之 EndProperty 項目的資料表資料行。如果是要產生關聯之概念結構描述中的實體,資料表中必須有外部索引鍵資料行包含另一個資料表的某個屬性。通常這個外部索引鍵資料行會對應到實體的 key 屬性。
AssociationSetMapping 會指定於 EntityContainerMapping 項目的內部。下列 Employee_Employee_ManagerIDAssociationSetMapping 的宣告會定義 AdventureWorksHRModel 概念結構描述中定義之 AssociationSet 與 TypeName 的對應。
因為這兩個關聯實體都是 Employee 實體,所以一個資料表會包含兩個實體的資料。此範例中的 EndProperty 項目會指定概念結構描述中定義之每個相關實體的角色,而 ScalarProperty 項目則會指定每個實體的屬性以及這個屬性所對應的 ColumnName。此關聯的兩端為 Employee 實體,而且每個案例中的識別屬性都會連結到 Employee 資料表的對應 EmployeeID 資料行。此條件指定第二個 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 實體連接 (後者必須由 Employee 資料表中 ManagerID 資料行內的外部索引鍵值指定為經理)。如果這個資料行未指派值,就不會符合此條件,而且指派此關聯中的其他詳細資料就沒有意義。如果當 ManagerID 值為 Null 時,在程式碼中建立這種關聯,則當呼叫 SaveChanges 方法時,此關聯會擲回例外狀況。
另請參閱
概念
EntityContainerMapping 項目 (MSL)
Association 項目 (CSDL)
AssociationSet 項目 (EntityContainer CSDL)
Association 項目 (SSDL)
AssociationSet 項目 (EntityContainer SSDL)
AdventureWorks 完整模型 (EDM)