實體集

實體集是實體類型執行個體及衍生自該實體類型之任何型別執行個體的邏輯容器。 (如需衍生型別的相關資訊,請參閱實體資料模型:繼承。)實體類型和實體集之間的關聯性,類似關聯式資料表中資料行和資料列的關聯性:實體類型和資料行一樣描述資料結構,而實體集則和資料表一樣包含指定結構的執行個體。 實體集不是資料模型建構,也就是說,它不會描述資料結構。 反之,實體集會提供建構,讓裝載或儲存環境 (例如 Common Language Runtime 或 SQL Server 資料庫) 群組實體類型執行個體,以將其對應至資料存放區。

實體集是在實體容器中定義的,此實體容器是實體集和關聯集的邏輯群組。

實體類型執行個體若要存在於實體集中,下列條件必須為 true:

  • 執行個體的類型必須與該實體集所依據的實體類型相同,或者執行個體的型別為該實體類型的子類型。

  • 執行個體的實體索引鍵在實體集內是唯一的。

  • 執行個體不存在於任何其他實體集中。

    注意

    您可以使用相同的實體類型定義多個實體集,但指定實體類型的執行個體只能存在於一個實體集中。

您不需定義概念模型中每個實體類型的實體集。

範例

下圖顯示包含三種實體類型 (BookPublisherAuthor) 的概念模型。

Example model with three entity types

下圖顯示以前述概念模型為基礎的兩個實體集 (BooksPublishers),以及一個關聯集 PublishedBy)。 Books 實體集中的 Bi 代表執行階段時的 Book 實體類型執行個體。 同樣地,Pj 則代表 Publishers 實體集中的 Publisher 執行個體。 BiPj 代表 PublishedBy 關聯集內的 PublishedBy 關聯的執行個體。

Screenshot that shows a Sets example.

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>

您可以定義每個類型的多重實體集 (MEST)。 下列 CSDL 所定義的實體容體具有兩個 Book 實體類型的實體集:

<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" />
  <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
    <End Role="Book" EntitySet="Books" />
    <End Role="Publisher" EntitySet="Publishers" />
  </AssociationSet>
  <AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
    <End Role="Book" EntitySet="Books" />
    <End Role="Author" EntitySet="Authors" />
  </AssociationSet>
</EntityContainer>

另請參閱