关联 (EDM)

在 实体数据模型 (EDM) 中,关系为实体之间的逻辑连接建立模型。EDM 支持关系的 AssociationType,后者为实体之间的对等关系建模。

在关联中,每个参与实体都称为。每个都具有一个 Role 属性,该属性用于命名和描述关联各的逻辑。

关联各端的 Type 属性定义参与关系的实体类型。

关联具有一个 Multiplicity 属性。Multiplicity 属性指定可参与关系的各的实例数。

在许多 LOB 应用程序的逻辑中,客户发出订单,并且必须根据订单向客户交货。可以通过 EDM 关联为客户与订单之间的关系建立模型。关联的各端为客户实体和订单实体。每个都有一个实体类型Role 属性描述由 Type 属性指定的实体的功能。在大多数情况下,每个客户可能具有零个或多个订单,但一个订单仅与一个客户关联。换句话说,客户类型的 Multiplicity 为 1,而订单的 Multiplicity 为 *。有关 Multiplicity 的更多信息,请参见 实体数据模型关系

示例

在下面的概念架构定义语言 (CSDL) 语法中,Association 元素指定 CustomersOrders 之间的关系的逻辑。

<?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_CustomerAssociationName 属性用于标识所有操作中的关系。每个参与实体都是。端的 Type 属性标识所有操作中的类型。每个参与实体都是一个,它指定参与关联的实体类型,在本例中为 CustomersOrders。每个都具有 RoleMultiplicity 属性。

EDM 关联的特性

关联具有以下特征:

  • 重数:关联元素可以为 0 到 n 个,其中任一的基数都可能发生变化。

  • 非排他成员资格:一个实体类型可以参与多个关联。

  • 方向:关联在实体之间是双向的,可从任一导航。

重数

Multiplicity 属性定义端在所有操作中的基数。每个参与实体都是 Association 的一个元素。前面的 CSDL 示例指定恰好一个 Customer (Multiplicty="1") 对应于零个或多个订单 (Multiplicty="*")。

下表列出了 Multiplicity 的所有可能的值:

说明

0..1

零或一

1

恰好一个

*

零个或更多

非排他成员资格

一个实体类型可以参与多个关联。

方向

EDM 中的关联是双向的。

另请参见

概念

实体数据模型关系