实体集是实体类型和从该实体类型派生的任何类型的实例的逻辑容器。 (有关派生类型的信息,请参阅 实体数据模型:继承。)实体类型和实体集之间的关系类似于关系数据库中的行和表之间的关系:与行、实体类型描述数据结构以及实体集(如表)包含给定结构的实例。 实体集不是数据建模构造;它不描述数据的结构。 相反,实体集为托管或存储环境(例如公共语言运行时或 SQL Server 数据库)提供构造来对实体类型实例进行分组,以便它们可以映射到数据存储。
若要使实体类型实例存在于实体集中,必须满足以下条件:
实例的类型与实体集所基于的实体类型相同,或者实例的类型是实体类型的子类型。
实例的 实体键 在实体集中是唯一的。
该实例不存在于任何其他实体集中。
注释
可以使用同一实体类型定义多个实体集,但给定实体类型的实例只能存在于一个实体集中。
无需为概念模型中的每个实体类型定义实体集。
示例:
下图显示了一个概念模型,其中包含三种实体类型:Book和PublisherAuthor。
下图显示了两个实体集(Books 和 Publishers)和一个关联集(PublishedBy),具体取决于上面所示的概念模型。 实体集中的 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>
可以为每个类型定义多个实体集(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>