Association Set — 关联集

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

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

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

  • 关联集名称。 (必需)

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

  • 两个关联集端

示例

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

包含三个实体类型的示例模型

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

屏幕截图显示集示例。

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>

请参阅