アソシエーション セットは、同じ型のアソシエーション インスタンスの論理コンテナーです。 アソシエーション セットはデータ モデリングコンストラクトではありません。つまり、データやリレーションシップの構造は記述されません。 代わりに、関連付けセットは、ホスティング環境またはストレージ環境 (共通言語ランタイムや SQL Server データベースなど) に対して、関連付けインスタンスをグループ化してデータ ストアにマップするためのコンストラクトを提供します。
アソシエーション セットは、 エンティティ セットとアソシエーション セットの論理グループである エンティティ コンテナー内で定義されます。
関連付けセットの定義には、次の情報が含まれています。
アソシエーション セット名。 (必須)
インスタンスを含むアソシエーション。 (必須)
2 つのアソシエーション セット End。
例
次の図は、 PublishedBy
と WrittenBy
の 2 つの関連付けを持つ概念モデルを示しています。 この図では関連付けセットに関する情報は示されていませんが、次の図は、このモデルに基づくアソシエーション セットとエンティティ セットの例を示しています。
次の例は、上記の概念モデルに基づく関連付けセット (PublishedBy
) と 2 つのエンティティ セット (Books
と Publishers
) を示しています。 Books
エンティティ セット内の bi は、実行時にBook
エンティティ型のインスタンスを表します。 同様に、Pj は、Publisher
エンティティ セット内のPublishers
インスタンスを表します。 BiPj は、PublishedBy
関連付けセット内のPublishedBy
関連付けのインスタンスを表します。
ADO.NET Entity Framework では、概念スキーマ定義言語 (CSDL) と呼ばれるドメイン固有言語 (DSL) を使用して概念モデルを定義します。 次の CSDL では、上の図の関連付けごとに 1 つの関連付けが設定されたエンティティ コンテナーを定義します。 各関連付けセットの名前と関連付けは、XML 属性を使用して定義されることに注意してください。
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
関連付けセットの末尾を共有する関連付けセットが 2 つもない限り、関連付けごとに複数の 関連付けセットを定義できます。 次の CSDL では、 WrittenBy
関連付けに対して 2 つの関連付けセットを持つエンティティ コンテナーを定義します。 Book
エンティティ型とAuthor
エンティティ型に対して複数のエンティティ セットが定義されており、関連付けセットの末尾を共有する関連付けセットがないことに注意してください。
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<EntitySet Name="FictionAuthors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
<AssociationSet Name="FictionWrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="FictionBooks" />
<End Role="Author" EntitySet="FictionAuthors" />
</AssociationSet>
</EntityContainer>