アソシエーション (EDM)

エンティティ データ モデル (EDM) では、エンティティ間の論理的な関係がリレーションシップによってモデル化されます。EDM は、エンティティ間のピア ツー ピアの関係をモデル化する AssociationType のリレーションシップをサポートしています。

アソシエーションに参加している各エンティティを End といいます。それぞれの End には、Role 属性が存在し、アソシエーションの各 End に名前を付けたり、その論理を説明したりする目的で使用されます。

アソシエーションの End に指定される Type 属性は、そのリレーションシップに参加しているエンティティの型を定義するものです。

アソシエーションには、Multiplicity 属性があります。Multiplicity 属性では、リレーションシップに参加できる各 End のインスタンス数が指定されます。

通常、LOB アプリケーションのロジックでは、顧客が商品を注文し、注文された商品は顧客に配送されます。顧客と注文のリレーションシップは、EDM アソシエーションによってモデル化できます。アソシエーションの両端のエンティティは顧客と注文です。それぞれの End には、エンティティの Type が割り当てられます。Role 属性は、Type 属性で指定されたエンティティの役割を表します。ほとんどの場合、それぞれの顧客は 0 件以上の注文をすることができます。しかし、注文は、1 人の顧客にしか関連付けることができません。言い換えると、顧客の Multiplicity は 1 で、注文の Multiplicity は * です。Multiplicity の詳細については、「Entity Data Model のリレーションシップ」を参照してください。

次の概念スキーマ定義言語 (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 属性は、すべての操作において、このリレーションシップを識別するために使用されます。参加している各エンティティが End です。すべての操作で、Type 属性です。 参加している各エンティティが End であり、アソシエーションに参加しているエンティティの型 (ここでは CustomersOrders) を指定しています。 各 End には、Role 属性と Multiplicity 属性があります。

EDM アソシエーションの特徴

アソシエーションには次の特徴があります。

  • 複数要素の接続性 : アソシエーションの End 要素は 0 ~ n 個になります。End の基数は可変です。

  • 非排他的なメンバシップ : 1 つのエンティティ型は複数のアソシエーションに参加できます。

  • 方向 : エンティティ間のアソシエーションは双方向であり、いずれの End からでもたどることができます。

複数要素の接続性

Multiplicity 属性は、すべての操作の基数を定義します。参加している各エンティティが、AssociationEnd 要素になります。前の CSDL の例では、0 件以上の注文 (Multiplicty="*") に対し、Customer (Multiplicty="1") が 1 つだけ存在することが指定されています。

次の表は、Multiplicity が取りうるすべての値を一覧にしたものです。

説明

0..1

0 個または 1 個

1

1 個

*

0 個以上

非排他的なメンバシップ

1 つのエンティティ型は複数のアソシエーションに参加できます。

方向

EDM のアソシエーションは双方向です。

参照

概念

Entity Data Model のリレーションシップ