エンティティ セット
"エンティティ セット" は、エンティティ型のインスタンスと、そのエンティティ型から派生するあらゆる型のインスタンスの論理コンテナーです。 (派生型について詳しくは、「Entity Data Model: 継承」をご覧ください。)エンティティ型とエンティティ セットの間のリレーションシップは、リレーショナル データベースの行とテーブルの間のリレーションシップと似ています。エンティティ型では、行のようにデータの構造が記述され、エンティティ セットには、テーブルのように特定の構造のインスタンスが含まれます。 エンティティ セットは、データ モデリング構造ではなく、データ構造を表しません。 エンティティ セットは、エンティティ型のインスタンスをグループ化してデータ ストアにマップするための、ホスト環境またはストレージ環境 (共通言語ランタイムや SQL Server データベースなど) の構造を提供します。
エンティティ セットは、エンティティ セットとアソシエーション セットの論理グループであるエンティティ コンテナー内で定義されます。
エンティティ型のインスタンスがエンティティ セット内に存在できるようにするには、次の条件を満たしている必要があります。
インスタンスの型がエンティティ セットの基本になるエンティティ型と同じであるか、インスタンスの型がエンティティ型のサブタイプであること。
インスタンスのエンティティ キーがエンティティ セット内で一意であること。
インスタンスが他のエンティティ セットに存在しないこと。
Note
同じエンティティ型を使用して複数のエンティティ セットを定義できますが、特定のエンティティ型のインスタンスは、1 つのエンティティ セット内のみに存在できます。
概念モデルの各エンティティ型にはエンティティ セットを定義する必要がありません。
例
下のダイアグラムは、Book
、Publisher
、および Author
という 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>