關聯集

關聯集是相同類型的關聯實例的邏輯容器。 關聯集不是數據模型建構;也就是說,它不會描述數據或關聯性的結構。 相反地,關聯集會為裝載或儲存環境(例如 Common Language Runtime 或 SQL Server 資料庫)提供建構,以將關聯實例分組,以便將其對應至數據存放區。

關聯集定義於 實體容器內,這是 實體集 和關聯集的邏輯群組。

關聯集的定義包含下列資訊:

  • 關聯集名稱。 (必要項)

  • 它所包含實例的關聯。 (必要項)

  • 兩 個關聯集結尾。

範例

下圖顯示具有兩個關聯的概念模型: PublishedBy、 和 WrittenBy。 雖然圖表中並未傳達關聯集的相關信息,但下一個圖表顯示以這個模型為基礎的關聯集和實體集範例。

具有三種實體類型的範例模型

下列範例會根據上述概念模型,顯示關聯集 (PublishedBy) 和兩個實體集 (Books 和 Publishers)。 實體集合中的 Books BI 代表執行時該 Book 實體類型的實例。 同樣地,Pj 代表 Publisher 實體集中的 Publishers 實例。 BiPj 代表PublishedBy關聯在PublishedBy關聯集中的一個實例。

顯示設定範例的螢幕快照。

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 關聯相關的關聯集。 請注意,已針對 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>

另請參閱