エンティティ セット

"エンティティ セット" は、エンティティ型のインスタンスと、そのエンティティ型から派生するあらゆる型のインスタンスの論理コンテナーです。 (派生型について詳しくは、「Entity Data Model: 継承」をご覧ください。)エンティティ型とエンティティ セットの間のリレーションシップは、リレーショナル データベースの行とテーブルの間のリレーションシップと似ています。エンティティ型では、行のようにデータの構造が記述され、エンティティ セットには、テーブルのように特定の構造のインスタンスが含まれます。 エンティティ セットは、データ モデリング構造ではなく、データ構造を表しません。 エンティティ セットは、エンティティ型のインスタンスをグループ化してデータ ストアにマップするための、ホスト環境またはストレージ環境 (共通言語ランタイムや SQL Server データベースなど) の構造を提供します。

エンティティ セットは、エンティティ セットとアソシエーション セットの論理グループであるエンティティ コンテナー内で定義されます。

エンティティ型のインスタンスがエンティティ セット内に存在できるようにするには、次の条件を満たしている必要があります。

  • インスタンスの型がエンティティ セットの基本になるエンティティ型と同じであるか、インスタンスの型がエンティティ型のサブタイプであること。

  • インスタンスのエンティティ キーがエンティティ セット内で一意であること。

  • インスタンスが他のエンティティ セットに存在しないこと。

    Note

    同じエンティティ型を使用して複数のエンティティ セットを定義できますが、特定のエンティティ型のインスタンスは、1 つのエンティティ セット内のみに存在できます。

概念モデルの各エンティティ型にはエンティティ セットを定義する必要がありません。

下のダイアグラムは、BookPublisher、および Author という 3 つのエンティティ型の概念モデルを示しています。

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

次のダイアグラムには、上の概念モデルに基づく 2 つのエンティティ セット (Books および Publishers) と、アソシエーション セット(PublishedBy) を示しています。 Books エンティティ セット内の Bi は、実行時の Book エンティティ型インスタンスを表します。 同様に、Pj は、Publishers エンティティ セットの Publisher インスタンスを表します。 BiPj は、PublishedBy アソシエーション セット内にある PublishedBy アソシエーションのインスタンスを表します。

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

ADO.NET Entity Framework では、概念スキーマ定義言語 (CSDL) と呼ばれるドメイン固有言語 (DSL) を使用して概念モデルを定義します。 次の CSDL は、上の概念モデルに示された各エンティティ型に対して 1 つのエンティティ セットを持つエンティティ コンテナーを定義しています。 各エンティティ セットの名前とエンティティ型は、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>

型ごとに複数のエンティティ セット (Multiple-Entity-Sets-per-Type: MEST) を定義できます。 次の CSDL は、Book エンティティ型のエンティティ セットを 2 つ持つエンティティ コンテナーを定義しています。

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

関連項目