关联 (EDM)
在 实体数据模型 (EDM) 中,关系为实体之间的逻辑连接建立模型。EDM 支持关系的 AssociationType,后者为实体之间的对等关系建模。
在关联中,每个参与实体都称为端。每个端都具有一个 Role 属性,该属性用于命名和描述关联各端的逻辑。
关联各端的 Type 属性定义参与关系的实体类型。
关联具有一个 Multiplicity 属性。Multiplicity 属性指定可参与关系的各端的实例数。
在许多 LOB 应用程序的逻辑中,客户发出订单,并且必须根据订单向客户交货。可以通过 EDM 关联为客户与订单之间的关系建立模型。关联的各端为客户实体和订单实体。每个端都有一个实体类型。Role 属性描述由 Type 属性指定的实体的功能。在大多数情况下,每个客户可能具有零个或多个订单,但一个订单仅与一个客户关联。换句话说,客户类型的 Multiplicity 为 1,而订单的 Multiplicity 为 *。有关 Multiplicity 的更多信息,请参见 实体数据模型关系。
示例
在下面的概念架构定义语言 (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 属性用于标识所有操作中的关系。每个参与实体都是端。端的 Type 属性标识所有操作中的类型。每个参与实体都是一个端,它指定参与关联的实体类型,在本例中为 Customers
和 Orders
。每个端都具有 Role 和 Multiplicity 属性。
EDM 关联的特性
关联具有以下特征:
重数
Multiplicity 属性定义端在所有操作中的基数。每个参与实体都是 Association 的一个端元素。前面的 CSDL 示例指定恰好一个 Customer (Multiplicty="1")
对应于零个或多个订单 (Multiplicty="*"
)。
下表列出了 Multiplicity 的所有可能的值:
值 | 说明 |
---|---|
|
零或一 |
|
恰好一个 |
|
零个或更多 |
非排他成员资格
一个实体类型可以参与多个关联。
方向
EDM 中的关联是双向的。