Association Set — 关联集

关联集是相同类型的关联实例的逻辑容器。 关联集不是一种数据建模构造,也就是说,它没有描述数据结构或关系。 相反,关联集提供了一种承载或存储环境构造(例如公共语言运行库或 SQL Server 数据库)来分组关联实例,以便可以将它们映射到某个数据存储区。

关联集在实体容器中定义,后者是实体集和关联集的逻辑分组。

关联集的定义包含以下信息:

  • 关联集名称。 (必需)

  • 要包含其实例的关联。 (必需)

  • 两个关联集端

示例

下图显示了一个具有两个关联的概念模型:PublishedByWrittenBy。 上图没有传达有关关联集的信息,但下图显示了一个基于此模型的关联集和实体集的示例。

Example model with three entity types

下面的示例显示了基于上面所示的概念模型的一个关联集 (PublishedBy) 和两个实体集(BooksPublishers)。 Books 实体集中的 Bi 表示运行时的 Book 实体类型实例。 类似地,Pj 表示 Publishers 实体集中的 Publisher 实例。 BiPj 表示 PublishedBy 关联集中的 PublishedBy 关联实例。

Screenshot that shows a Sets example.

ADO.NET 实体框架使用一种称为概念架构定义语言 (CSDL) 的域特定语言 (DSL) 来定义概念模型。 下面的 CSDL 定义了一个实体容器,其中对于上图所示的每个关联都有一个关联集。 请注意,每个关联集的名称和关联都是使用 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>

每个关联可以定义多个关联集,只要没有任何两个关联集共享一个关联集端即可。 下面的 CSDL 定义了一个实体容器,其中包含 WrittenBy 关联的两个关联集。 请注意,为 BookAuthor 实体类型定义了多个实体集,并且没有关联集共享关联集端。

<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>

请参阅