37.3 Das Entity Data Model im Designer
37.3.1 Die übergeordneten Eigenschaften einer Entität
Jede Entität wird im Entity Data Model durch allgemeine Eigenschaften spezifiziert. Damit sind nicht die Eigenschaften gemeint, die die Daten eines bestimmten Objekts vom Typ der Entität speichern (gewissermaßen also die Spalten einer Datenzeile), sondern die Eigenschaften, die den Entitätstyp ganzheitlich beschreiben. Wenn Sie im Designer die Entität Product markieren und dann das Eigenschaftsfenster öffnen, werden Sie diese allgemeinen Eigenschaften sehen (siehe Abbildung 37.5).
Abbildung 37.5 Die Entität »Product« im Eigenschaftsfenster
- Abstrakt: Im Entity Framework können Sie innerhalb des EDM die Vererbung benutzen, um Entitäten miteinander in eine Vererbungsbeziehung zu setzen. Mit dieser Eigenschaft lässt sich festlegen, ob die Entität als abstrakte Basisklasse ihre Eigenschaften nur den ableitenden Entitäten zur Verfügung stellen soll.
- Basistyp: Handelt es sich bei der Entität um eine ableitende Klasse, gibt diese Eigenschaft die Basisklasse an.
- Dokumentation: Diese Eigenschaft gestattet es, entweder eine kurze oder lange (oder beides) Beschreibung der Entität hinzuzufügen. Die kurze Beschreibung entspricht dem <summary>-Element eines XML-Kommentars, die lange wird in die XML-Dokumentationsdatei des Ausgabeverzeichnisses geschrieben, wenn die entsprechende Option im Projekteigenschaftsfenster aktiviert ist.
- Name: Diese Eigenschaft gibt den Bezeichner der Entität an. Sollten Sie im Assistenten in Abbildung 37.4 die Option Generierte Objektnamen in den Singular oder Plural setzen nicht ausgewählt haben, würde ein pluralisierender Bezeichner generiert, beispielsweise Products.
- Name der Entitätenmenge: Diese Eigenschaft legt fest, wie die Eigenschaft heißt, mit der später eine Menge vom Typ der jeweiligen Entität im Code abgefragt werden kann.
- Zugriff: Es sollte eigentlich klar sein, dass mit dieser Eigenschaft die Sichtbarkeit der Entität festgelegt wird.
37.3.2 Eigenschaften eines Entitätsobjekts
Eine Entität, wie wir sie im Designer des EDM sehen, kann man als Container verstehen, der drei verschiedene Eigenschaftstypen enthalten kann:
- skalare Eigenschaften
- komplexe Eigenschaften
- Navigationseigenschaften
Skalare Eigenschaften
Unter den skalaren Eigenschaften sind diejenigen zu verstehen, die im Grunde genommen die Spalten einer Datenbanktabelle abbilden. Dabei wird jede Spalte der Tabelle in der Entität durch eine Eigenschaft dargestellt.
Jede Spalte einer Tabelle wird ihrerseits durch eine Reihe von Eigenschaften spezifiziert, beispielsweise durch einen Datentyp, ob sie Null zulässt oder eine feste Länge hat. Sie können sich die Eigenschaften einer Spalte (besser sollte ich schreiben, einer skalaren Eigenschaft) im Eigenschaftsfenster der Entwicklungsumgebung ansehen, wenn Sie im Designer eine Eigenschaft selektieren. In Abbildung 37.6 wird das anhand der Eigenschaft ProductName der Entität Product gezeigt.
Abbildung 37.6 Die Eigenschaften der Entitätseigenschaft »ProductName«
In Tabelle 37.1 sind die Eigenschaften der »Spalteneigenschaften« erläutert.
Eigenschaft | Beschreibung |
Dokumentation |
Siehe auch die gleichnamige Eigenschaftsbeschreibung in Abschnitt 37.3.1. |
Entitätsschlüssel |
Diese Eigenschaft gibt an, ob es sich bei der Spalteneigenschaft um den Primärschlüssel handelt. Jede Entität muss mindestens eine solche Eigenschaft haben. Hat die zugrunde liegende Tabelle der Entität einen zusammengesetzten Primärschlüssel, können auch mehrere Entitätseigenschaften die Einstellung Entitätsschlüssel = true haben. |
Feste Länge |
Diese Eigenschaft gibt vor, ob diese Entitätseigenschaft eine feste Länge aufweist. |
Getter / Setter |
Mit dieser Eigenschaft wird der Zugriff auf die Entitätseigenschaft festgelegt. |
Maximale Länge |
Legt die Maximallänge der Entitätseigenschaft fest. Als Werte sind neben einer individuell eingestellten Länge auch (None) und Max möglich. |
NULL zulassen |
Gibt an, ob die Entitätseigenschaft null zulässt oder nicht. |
Parallelitätsmodus |
Diese Eigenschaft hängt mit der Aktualisierung zusammen und beschreibt, ob die Eigenschaft während der Aktualisierung überprüft werden soll. |
Standardwert |
Legt den Standardwert der Entitätseigenschaft fest. |
StoreGeneratedPattern |
Diese Eigenschaft gibt an, was getan werden soll, wenn eine Datenzeile hinzugefügt oder geändert werden soll. |
Typ |
Legt den Datentyp der Entitätseigenschaft fest. Abhängig davon, welche Einstellung hier gewählt ist, werden nur die Eigenschaften im Eigenschaftsfenster angezeigt, die im Zusammenhang mit dem Datentyp sinnvoll sind. |
Unicode |
Diese Eigenschaft ist nur im Zusammenhang mit dem Datentyp String relevant. Hiermit wird festgelegt, ob die Zeichenfolge im Unicode abgelegt werden soll oder nicht. |
Komplexe Eigenschaften
Komplexe Typen sind eine Möglichkeit, mehrere skalare Eigenschaften zusammenzufassen. Angenommen, die beiden Entitäten Mitarbeiter und Kundeninformation eines Entity Data Models würden die Adressinformationen von Personen beschreiben, beispielsweise den Namen, den Wohnort und die Straße. Es würde sich anbieten, aus diesen drei Eigenschaften den komplexen Typ Address zu bilden und diesen zu einer Eigenschaft der beiden Entitäten Mitarbeiter und Kundeninformation zu machen.
Komplexe Typen werden als Klassen definiert. Sie können mit komplexen Typen den Code und das Entity Data Model zwar besser strukturieren, sie können aber nicht direkt abgefragt oder separat in der Datenbank gespeichert werden.
Navigationseigenschaften
Widmen wir uns nun der dritten Gruppe der Eigenschaften, den Navigationseigenschaften. Exemplarisch sehen wir uns dazu die Navigationseigenschaft Category in der Entität an. Wie skalare Eigenschaften, so werden auch Navigationseigenschaften durch eigenschaftsspezifische Einstellungen beschrieben, die im Eigenschaftsfenster von Visual Studio angezeigt werden, wenn die entsprechende Navigationseigenschaft im Designer ausgewählt ist (siehe Abbildung 37.7).
Abbildung 37.7 Die Eigenschaften der Navigationseigenschaft »Category«
Navigationseigenschaften beschreiben, wie zu einer in Beziehung (Assoziation) stehenden Entität navigiert wird. Dabei greifen die Navigationseigenschaften auf im Entity Data Model definierte Assoziationen zurück, die die Beziehung zwischen zwei Entitäten exakt beschreiben. In unserem Beispiel lautet der Bezeichner der Beziehung FK_Products_Categories. Die Verknüpfung einer Navigationseigenschaft mit einer bestimmten Assoziation erfolgt mit der Eigenschaft Zuordnung.
Die Eigenschaft Multiplizität gibt an, wie viele Entitäten beim Aufruf der Navigationsmethode als Resultat geliefert werden können. In unserem Beispiel ist es keins, weil ein Produkt nicht zwangsläufig einer Kategorie zugeordnet werden muss, oder genau eins. Der Rückgabetyp ist mit der schreibgeschützten Eigenschaft Rückgabetyp ebenfalls angegeben.
Betrachten wir nun die zweite Entität in unserem EDM: Category. Die Navigationsmethode lautet hier Products und suggeriert uns, dass mit dem Aufruf
Category.Products
eine Liste von Produkten zurückgeliefert wird, unabhängig davon, ob die Liste leer ist, nur ein Produkt oder viele enthält. Die Liste ist dabei vom Typ EntityCollection<T> oder, um es präzise auszudrücken, vom Typ EntityCollection<Product>.
37.3.3 Assoziationen im Entity Data Model
Die Beziehung zwischen zwei Tabellen in einer Datenbank wird im Entity Data Model durch Assoziationen, auch als Zuordnung bezeichnet, abgebildet. Navigationseigenschaften benutzen Assoziationen, um von einer Entität auf in Beziehung stehende Entitäten zuzugreifen.
Wir sollten nun einen Blick auf die Zuordnung zwischen den beiden Entitäten Product und Category im Designer werfen. Da Zuordnungen auch durch Eigenschaften beschrieben werden, markieren wir die Zuordnung im Designer und wenden danach unsere Aufmerksamkeit auf das Eigenschaftsfenster, in dem nunmehr die Eigenschaften der Assoziation angezeigt werden (siehe Abbildung 37.8).
Abbildung 37.8 Eigenschaften der Assoziation
Eine Assoziation beschreibt mit End1 und End2 zwei Endpunkte. Bei End1 handelt es sich um den Endpunkt der Assoziation auf Seiten der Entität Category, End2 ist der Endpunkt auf Seiten der Entität Product. Der jeweilige Bezeichner der Endpunkte wird von den Eigenschaften End1-Rollenname und End2-Rollenname festgelegt.
Die Multiplizität des jeweiligen Endpunkts wird mit der Eigenschaft End1-Multiplizität bzw. End2-Multiplizität beschrieben. Wie schon weiter oben erwähnt, können die Endpunkte durch »0..1« (null oder eine), »1« (eine) oder »*« (viele) beschrieben werden. Die Navigationseigenschaft der zu einem Endpunkt zugeordneten Entität legt die Eigenschaft End1-/End2-Navigationseigenschaft fest.
37.3.4 Der Kontext der Entitäten
Wir haben in den letzten Abschnitten einen Blick auf die Entitäten und deren Beziehungen untereinander geworfen. Im Grunde genommen wird noch eine weitere Komponente im Designer dargestellt, die jedoch keine grafische Präsentation hat. Es ist das Entity Model selbst mit allen seinen Eigenschaften zur Generierung und Verwaltung. Sie können sich dessen Eigenschaften im Eigenschaftsfenster anzeigen lassen, indem Sie einfach in den freien Bereich des Designers klicken (siehe Abbildung 37.9).
Auf alle Eigenschaften an dieser Stelle einzugehen würde deutlich zu weit führen. Aber auf eine Eigenschaft muss ich Sie aufmerksam machen. Es ist die Eigenschaft Entitätscontainername, der in unserem Modell auf NorthwindEntities eingestellt ist. Hier wird der Bezeichner des Containers angegeben, von dem standardmäßig alle Entitäten verwaltet werden. Ohne ein Objekt dieses Containers, der vom Typ ObjectContext ist, geht fast nichts, er bildet das Herzstück der EF-Anwendung.
Abbildung 37.9 Eigenschaften des Kontexts
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.