Association Set — 关联集

关联集是同一类型的关联实例的逻辑容器。 关联集不是数据建模构造;也就是说,它不描述数据或关系的结构。 相反,关联集为宿主或存储环境(如公共语言运行时或 SQL Server 数据库)提供构造来对关联实例进行分组,以便它们可以映射到数据存储。

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

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

  • 关联集名称。 (必需)

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

  • 两个关联集端

示例:

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

具有三种实体类型的示例模型

以下示例根据上面所示的概念模型显示关联集(PublishedBy)和两个实体集(BooksPublishers)。 在实体集 Books 中的 Bi 表示在运行时 Book 实体类型的一个实例。 同样,Pj 表示 Publisher 实体集中的 Publishers 实例。 BiPj 表示PublishedBy关联集中的PublishedBy关联实例。

显示“Sets”示例的屏幕截图。

ADO.NET Entity Framework 使用称为概念架构定义语言(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>

另请参阅