Schlüsselkonzepte im Entity Data Model
Das Entity Data Model (EDM) beschreibt die Datenstruktur mithilfe von drei Schlüsselkonzepten: Entitätstyp, Zuordnungstyp und Eigenschaft. Diese sind die wichtigsten Konzepte zum Beschreiben der Datenstruktur in einer beliebigen Implementierung des EDM.
Entitätstyp
Der Entitätstyp ist der wesentliche Baustein zum Beschreiben der Datenstruktur mit dem Entity Data Model. In einem konzeptionellen Modell werden Entitätstypen aus Eigenschaften erstellt und beschreiben die Struktur von Konzepten der obersten Ebene, z. B. Kunden und Bestellungen in einer Geschäftsanwendung. So wie eine Klassendefinition in einem Computerprogramm eine Vorlage für Instanzen der Klasse ist, ist ein Entitätstyp eine Vorlage für Entitäten. Eine Entität stellt ein bestimmtes Objekt dar (z. B. einen bestimmter Kunde oder eine Bestellung). Jede Entität muss über einen eindeutigen Entitätsschlüssel innerhalb einer Entitätenmenge verfügen. Eine Entitätenmenge ist eine Auflistung der Instanzen eines bestimmten Entitätstyps. Entitätenmengen (und Zuordnungssätze) werden in einem Entitätencontainer logisch gruppiert.
Die Vererbung wird für Entitätstypen unterstützt; das heißt, ein Entitätstyp kann von einem anderen abgeleitet werden. Weitere Informationen finden Sie unter Entity Data Model: Vererbung.
Zuordnungstyp
Ein Zuordnungstyp (auch als Zuordnung bezeichnet) ist der wesentliche Baustein zum Beschreiben von Beziehungen im Entity Data Model. In einem konzeptionellen Modell stellt eine Zuordnung eine Beziehung zwischen zwei Entitätstypen dar (z. B. Customer und Order). Jede Zuordnung verfügt über zwei Zuordnungsenden, die die Entitätstypen der Zuordnung angeben. Jedes Zuordnungsende gibt auch eine Multiplizität des Zuordnungsendes an, die für die mögliche Anzahl der Entitäten an diesem Ende der Zuordnung steht. Die Multiplizität eines Zuordnungsendes kann über einen Wert von eins (1), null oder eins (0..1) oder n (*) verfügen. Auf Entitäten an einem Ende einer Zuordnung kann über Navigationseigenschaften oder über Fremdschlüssel zugegriffen werden, sofern sie für einen Entitätstyp verfügbar gemacht werden. Weitere Informationen finden Sie unter Fremdschlüsseleigenschaft.
In einer Anwendung stellt eine Instanz einer Zuordnung eine bestimmte Zuordnung dar (z. B. eine Zuordnung zwischen einer Instanz von Customer und einer Instanz von Order). Zuordnungsinstanzen werden logisch in einem Zuordnungssatz gruppiert. Zuordnungssätze (und Entitätenmengen) werden in einem Entitätencontainer logisch gruppiert.
Eigenschaft
Entitätstypen enthalten Eigenschaften, die ihre Struktur und Eigenschaften definieren. Ein Customer-Entitätstyp kann z. B. über Eigenschaften wie CustomerId, Name und Adress verfügen.
Eigenschaften in einem konzeptionellen Modell sind analog zu Eigenschaften, die für eine Klasse in einem Computerprogramm definiert wurden. So wie Eigenschaften die Form einer Klasse definieren und Informationen zu Objekten enthalten definieren Eigenschaften in einem konzeptionellen Modell die Form eines Entitätstyps und enthalten Informationen zu Entitätstypinstanzen.
Eine Eigenschaft kann primitive Daten (z. B. eine Zeichenfolge, eine ganze Zahl oder einen booleschen Wert) oder strukturierte Daten (z. B. einen komplexen Typ) enthalten. Weitere Informationen finden Sie unter Entity Data Model: primitive Datentypen.
Darstellungen eines konzeptionellen Modells
Ein konzeptionelles Modell ist eine bestimmte Darstellung der Struktur einiger Daten als Entitäten und Beziehungen. Eine Möglichkeit zur Darstellung eines konzeptionellen Modells ist ein Diagramm. Das folgende Diagramm stellt ein konzeptionelles Modell mit drei Entitätstypen (Book
, Publisher
und Author
) sowie zwei Zuordnungen (PublishedBy
und WrittenBy
) dar:
Diese Darstellung hat jedoch einige Nachteile beim Bereitstellen einiger Details zum Modell. Informationen zu Eigenschaftentyp und Entitätenmenge werden z. B. nicht im Diagramm bereitgestellt. Der Umfang eines konzeptionellen Modells kann mit einer domänenspezifischen Sprache (DSL) deutlicher vermittelt werden. Das ADO.NET Entity Framework verwendet eine XML-basierte DSL mit der Bezeichnung konzeptionelle Schemadefinitionssprache (CSDL), um konzeptionelle Modelle zu definieren. Das Folgende ist die CSDL-Definition des oben im Diagramm gezeigten konzeptionellen Modells:
<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm"
xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
Namespace="BooksModel" Alias="Self">
<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>
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
FromRole="Publisher" ToRole="Book" />
</EntityType>
<EntityType Name="Author">
<Key>
<PropertyRef Name="Name" />
<PropertyRef Name="Address" />
</Key>
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
FromRole="Author" ToRole="Book" />
</EntityType>
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
</Association>
<Association Name="WrittenBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
<End Type="BooksModel.Author" Role="Author" Multiplicity="*" />
</Association>
</Schema>