エンティティ セットentity set

"エンティティ セット" は、エンティティ型のインスタンスと、そのエンティティ型から派生するあらゆる型のインスタンスの論理コンテナーです。An entity set is a logical container for instances of an entity type and instances of any type derived from that entity type. (派生型について詳しくは、「Entity Data Model: 継承」をご覧ください。)エンティティ型とエンティティ セットの間のリレーションシップは、リレーショナル データベースの行とテーブルの間のリレーションシップと似ています。エンティティ型では、行のようにデータの構造が記述され、エンティティ セットには、テーブルのように特定の構造のインスタンスが含まれます。(For information about derived types, see Entity Data Model: Inheritance.) The relationship between an entity type and an entity set is analogous to the relationship between a row and a table in a relational database: Like a row, an entity type describes data structure, and, like a table, an entity set contains instances of a given structure. エンティティ セットは、データ モデリング構造ではなく、データ構造を表しません。An entity set is not a data modeling construct; it does not describe the structure of data. エンティティ セットは、エンティティ型のインスタンスをグループ化してデータ ストアにマップするための、ホスト環境またはストレージ環境 (共通言語ランタイムや SQL Server データベースなど) の構造を提供します。Instead, an entity set provides a construct for a hosting or storage environment (such as the common language runtime or a SQL Server database) to group entity type instances so that they can be mapped to a data store.

エンティティ セットは、エンティティ セットとアソシエーション セットの論理グループであるエンティティ コンテナー内で定義されます。An entity set is defined within an entity container, which is a logical grouping of entity sets and association sets.

エンティティ型のインスタンスがエンティティ セット内に存在できるようにするには、次の条件を満たしている必要があります。For an entity type instance to exist in an entity set, the following must be true:

  • インスタンスの型がエンティティ セットの基本になるエンティティ型と同じであるか、インスタンスの型がエンティティ型のサブタイプであること。The type of the instance is either the same as the entity type on which the entity set is based, or the type of the instance is a subtype of the entity type.

  • インスタンスのエンティティ キーがエンティティ セット内で一意であること。The entity key for the instance is unique within the entity set.

  • インスタンスが他のエンティティ セットに存在しないこと。The instance does not exist in any other entity set.

    注意

    同じエンティティ型を使用して複数のエンティティ セットを定義できますが、特定のエンティティ型のインスタンスは、1 つのエンティティ セット内のみに存在できます。Multiple entity sets can be defined using the same entity type, but an instance of a given entity type can only exist in one entity set.

概念モデルの各エンティティ型にはエンティティ セットを定義する必要がありません。You do not have to define an entity set for each entity type in a conceptual model.

Example

下のダイアグラムは、BookPublisher、および Author という 3 つのエンティティ型の概念モデルを示しています。The diagram below shows a conceptual model with three entity types: Book, Publisher, and Author.

3 種類のエンティティを持つモデルの例

次のダイアグラムには、上の概念モデルに基づく 2 つのエンティティ セット (Books および Publishers) と、アソシエーション セット(PublishedBy) を示しています。The following diagram shows two entity sets (Books and Publishers) and an association set (PublishedBy) based on the conceptual model shown above. Books エンティティ セット内の Bi は、実行時の Book エンティティ型インスタンスを表します。Bi in the Books entity set represents an instance of the Book entity type at run time. 同様に、Pj は、Publishers エンティティ セットの Publisher インスタンスを表します。Similarly, Pj represent a Publisher instance in the Publishers entity set. BiPj は、PublishedBy アソシエーション セット内にある PublishedBy アソシエーションのインスタンスを表します。BiPj represents an instance of the PublishedBy association in the PublishedBy association set.

セットの例を示すスクリーンショット。

ADO.NET Entity Framework では、概念スキーマ定義言語 (CSDL) と呼ばれるドメイン固有言語 (DSL) を使用して概念モデルを定義します。The ADO.NET Entity Framework uses a domain-specific language (DSL) called conceptual schema definition language (CSDL) to define conceptual models. 次の CSDL は、上の概念モデルに示された各エンティティ型に対して 1 つのエンティティ セットを持つエンティティ コンテナーを定義しています。The following CSDL defines an entity container with one entity set for each entity type in the conceptual model shown above. 各エンティティ セットの名前とエンティティ型は、XML 属性で定義されています。Note that the name and entity type for each entity set are defined using XML attributes.

<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>

型ごとに複数のエンティティ セット (Multiple-Entity-Sets-per-Type: MEST) を定義できます。It is possible to define multiple entity sets per type (MEST). 次の CSDL は、Book エンティティ型のエンティティ セットを 2 つ持つエンティティ コンテナーを定義しています。The following CSDL defines an entity container with two entity sets for the Book entity type:

<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>

関連項目See also