Entitätenmenge (Entity Data Model)
Eine Entitätenmenge ist ein logischer Container für Instanzen eines Entitätstyps und für Instanzen eines von diesem Entitätstyp abgeleiteten Typs. (Informationen zu abgeleiteten Typen finden Sie unter Entity Data Model: Vererbung.) Die Beziehung zwischen einem Entitätstyp und einer Entitätenmenge entspricht der Beziehung zwischen einer Zeile und einer Tabelle in einer relationalen Datenbank: Wie eine Zeile beschreibt ein Entitätstyp Datenstruktur, und eine Entitätenmenge enthält wie eine Tabelle Instanzen einer bestimmten Struktur. Eine Entitätenmenge ist keine Datenmodellkonstruktion, sie beschreibt keine Datenstruktur. Vielmehr stellt eine Entitätenmenge eine Konstruktion für eine Hosting- oder Speicherumgebung (z. B. die Common Language Runtime oder eine SQL Server-Datenbank) zum Gruppieren von Entitätstypinstanzen bereit, damit diese einem Datenspeicher zugeordnet werden können.
Eine Entitätenmenge wird innerhalb eines Entitätscontainers definiert, einer logischen Gruppierung von Entitätenmengen und Zuordnungssätzen.
Die folgenden Voraussetzungen müssen erfüllt sein, damit eine Entitätstypinstanz in einer Entitätenmenge existiert:
Der Typ der Instanz stimmt entweder mit dem Entitätstyp überein, auf dem die Entitätenmenge basiert, oder der Typ der Instanz ist ein Untertyp des Entitätstyps.
Der Entitätsschlüssel für die Instanz ist innerhalb der Entitätenmenge eindeutig.
Die Instanz ist in keiner anderen Entitätenmenge vorhanden.
Hinweis: Mehrere Entitätenmengen können mit dem gleichen Entitätstyp definiert werden, aber eine Instanz eines bestimmten Entitätstyps kann nur in einer Entitätenmenge vorhanden sein.
Sie müssen nicht für jeden Entitätstyp in einem konzeptionellen Modell eine Entitätenmenge definieren.
Beispiel
Die unten stehende Abbildung zeigt ein konzeptionelles Modell mit drei Entitätstypen: Book, Publisher und Author.
Die folgende Abbildung zeigt zwei Entitätenmengen (Books und Publishers) und einen Zuordnungssatz (PublishedBy) auf Grundlage des oben gezeigten konzeptionellen Modells. Bi in der Entitätenmenge Books stellt eine Instanz des Entitätstyps Book zur Laufzeit dar. Ebenso stellt Pj eine Publisher-Instanz in der Entitätenmenge Publishers dar. BiPj stellt eine Instanz der PublishedBy-Zuordnung im PublishedBy-Zuordnungssatz dar.
Das ADO.NET Entity Framework verwendet eine domänenspezifische Sprache (DSL) mit der Bezeichnung konzeptionelle Schemadefinitionssprache (CSDL), um konzeptionelle Modelle zu definieren. Die folgende CSDL definiert einen Entitätscontainer mit einer Entitätenmenge für jeden Entitätstyp im oben gezeigten konzeptionellen Modell. Beachten Sie, dass der Name und der Entitätstyp für jede Entitätenmenge mit XML-Attributen definiert werden.
<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>
Pro Typ (MEST) können mehrere Entitätenmengen definiert werden. Die folgende CSDL definiert einen Entitätscontainer mit zwei Entitätenmengen für den Book-Entitätstyp:
<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>