エンティティ セット

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

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

エンティティ型インスタンスがエンティティ セットに存在するには、次のことが満たされている必要があります。

  • インスタンスの型は、エンティティ セットの基になっているエンティティ型と同じか、インスタンスの型がエンティティ型のサブタイプです。

  • インスタンスの エンティティ キー は、エンティティ セット内で一意です。

  • インスタンスは他のエンティティ セットに存在しません。

    注

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

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

例

次の図は、 Book、 Publisher、 Authorの 3 種類のエンティティを持つ概念モデルを示しています。

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

次の図は、上記の概念モデルに基づく 2 つのエンティティ セット (Books と Publishers) とアソシエーション セット (PublishedBy) を示しています。 Books エンティティ セット内の bi は、実行時にBookエンティティ型のインスタンスを表します。 同様に、Pj は、Publisher エンティティ セット内のPublishers インスタンスを表します。 BiPj は、PublishedBy関連付けセット内のPublishedBy関連付けのインスタンスを表します。

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

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>

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

こちらも参照ください