關聯 (EDM)
在 實體資料模型 (EDM) 中,關聯性 (Relationship) 會在兩個實體 (Entity) 之間建立邏輯連接的模型。EDM 支援關聯性的 AssociationType,以便在實體之間建立點對點關聯性的模型。
在關聯中,每個參與的實體都稱為 End。每個 End 都具有 Role 屬性,可用來命名和描述關聯之每個 End 的邏輯。
關聯兩端的 Type 屬性會定義參與關聯性的實體類型。
關聯具有 Multiplicity 屬性。Multiplicity 屬性會指定可參與關聯性之每個 End 的執行個體數目。
在許多 LOB 應用程式的邏輯中,客戶會下訂單而且訂單必須傳遞給客戶。EDM 關聯就可以在客戶與訂單之間建立關聯性。關聯的兩端就是客戶和訂單實體。每個 End 都具有實體 Type。Role 屬性會描述 Type 屬性所指定之實體的功能。在大部分情況下,每位客戶都可以有零筆或多筆訂單,但是一筆訂單只會與一位客戶相關聯。換言之,客戶型別的 Multiplicity 是 1,而訂單的 Multiplicity 是 *。如需 Multiplicity 的詳細資訊,請參閱 Entity Data Model 關聯性。
範例
在下列概念結構定義語言 (CSDL) 語法中,Association 項目會指定 Customers
與 Orders
之間關聯性的邏輯。
<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration" xmlns:edm="https://schemas.microsoft.com/ado/2006/04/edm" xmlns="https://schemas.microsoft.com/ado/2006/04/edm" Namespace="MyCompany.LOBSchema" Alias="Self">
<EntityType Name="Customer">
<Key>
<PropertyRef Name="CustomerId" />
</Key>
<Property Name="CustomerId" Type="Guid" Nullable="false" />
<Property Name="Name" Type="String" Nullable="false" />
<Property Name="Address" Type="String" Nullable="false" />
<Property Name="City" Type="String" Nullable="false" />
<NavigationProperty Name="Orders" Relationship="Self.Order_Customer" FromRole="Customers" ToRole="Orders" />
</EntityType>
<EntityType Name="Order">
<Key>
<PropertyRef Name="OrderId" />
</Key>
<Property Name="OrderId" Type="String" Nullable="false" />
<Property Name="TotalAmount" Type="Decimal" />
<Property Name="Tax" Type="Decimal" />
<Property Name="ShippingAddress" Type="String" />
<NavigationProperty Name="Customer" Relationship="Self.Order_Customer" FromRole="Orders" ToRole="Customers" />
</EntityType>
<Association Name="Order_Customer">
<End Role="Customer" Type="OrderInfoModel.Customers"
Multiplicity="1" />
<End Role="Orders" Type="OrderInfoModel.Order" Multiplicity="*" />
</Association>
<EntityContainer Name="LOBSchemaData">
<EntitySet Name="Customers" EntityType="Self.Customer" />
<EntitySet Name="Orders" EntityType="Self.Order" />
<AssociationSet Name="Customers_Orders"
Association="Self.Order_Customer">
<End Role="Customer" EntitySet="Customers" />
<End Role="Order" EntitySet="Orders" />
</AssociationSet>
</EntityContainer>
</Schema>
Order_Customer
Association 的 Name 屬性可用來識別所有作業中的關聯性。每個參與的實體都是 End。End 的 Type 屬性適用於所有作業。每個參與的實體都是 End,會指定參與關聯的實體類型,在此情況下就是 Customers
和 Orders
。每個 End 都具有 Role 屬性和 Multiplicity 屬性。
EDM 關聯的功能
關聯具有下列特性:
非獨佔成員資格:一個實體類型可以參與多個關聯。
方向:實體之間的關聯是雙向的,而且您可以從任何一個 End 進行巡覽。
重數
Multiplicity 屬性會定義所有作業的基數。每個參與的實體都是 Association 的 End 項目。前述的 CSDL 範例指定零筆或多筆訂單 (Multiplicty="*"
) 都正好有一個 Customer (Multiplicty="1")
。
下表將列出 Multiplicity 的所有可能值:
值 | 描述 |
---|---|
|
零個或一個 |
|
只有一個 |
|
零個或多個 |
非獨佔成員資格
一個實體類型可以參與多個關聯。
方向
EDM 中的關聯是雙向的。