Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser schrittweisen Anleitung wird gezeigt, wie Sie die TPT-Vererbung (Table-per-Type) in Ihrem Modell mithilfe des Entity Framework-Designers (EF Designer) implementieren. Die Vererbung pro Typ verwendet eine separate Tabelle in der Datenbank, um Daten für nicht geerbte Eigenschaften und Schlüsseleigenschaften für jeden Typ in der Vererbungshierarchie beizubehalten.
In dieser exemplarischen Vorgehensweise ordnen wir die Entitäten "Kurs " (Basistyp), "OnlineCourse " (abgeleitet von "Course") und "OnsiteCourse " (abgeleitet von "Kurs") Tabellen mit denselben Namen zu. Wir erstellen ein Modell aus der Datenbank und ändern dann das Modell, um die TPT-Vererbung zu implementieren.
Sie können auch mit dem Modell zuerst beginnen und dann die Datenbank aus dem Modell generieren. Der EF Designer verwendet standardmäßig die TPT-Strategie, sodass jede Vererbung im Modell separaten Tabellen zugeordnet wird.
Weitere Vererbungsoptionen
Tabelle pro Hierarchie (TPH) ist ein anderer Vererbungstyp, in dem eine Datenbanktabelle verwendet wird, um Daten für alle Entitätstypen in einer Vererbungshierarchie zu verwalten. Informationen zum Zuordnen der Vererbung von Tabellen pro Hierarchie mit dem Entitäts-Designer finden Sie unter EF Designer TPH-Vererbung.
Beachten Sie, dass die TPC-Modelle (Table-per-Concrete Type Inheritance) und gemischte Vererbungsmodelle von der Entity Framework-Laufzeit unterstützt werden, aber vom EF Designer nicht unterstützt werden. Wenn Sie TPC oder gemischte Vererbung verwenden möchten, haben Sie zwei Optionen: Verwenden Sie Code First, oder bearbeiten Sie die EDMX-Datei manuell. Wenn Sie sich für die Arbeit mit der EDMX-Datei entscheiden, wird das Fenster "Zuordnungsdetails" in den abgesicherten Modus versetzt, und Sie können den Designer nicht verwenden, um die Zuordnungen zu ändern.
Voraussetzungen
Um diese exemplarische Vorgehensweise abzuschließen, benötigen Sie:
- Eine aktuelle Version von Visual Studio.
- Die Schule-Beispieldatenbank.
Einrichten des Projekts
- Öffnen Sie Visual Studio 2012.
- Datei auswählen -> Neu -> Projekt
- Klicken Sie im linken Bereich auf Visual C#, und wählen Sie dann die Konsolenvorlage aus.
- Geben Sie TPTDBFirstSample als Namen ein.
- Wählen Sie OK aus.
Modellerstellung
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie "Hinzufügen –> Neues Element" aus.
- Wählen Sie " Daten " im linken Menü aus, und wählen Sie dann im Bereich "Vorlagen" ADO.NET Entitätsdatenmodell aus.
- Geben Sie TPTModel.edmx für den Dateinamen ein, und klicken Sie dann auf "Hinzufügen".
- Wählen Sie im Dialogfeld "Modellinhalt auswählen" die Option **Aus Datenbank generieren** aus, und klicken Sie dann auf "Weiter".
- Klicken Sie auf "Neue Verbindung". Geben Sie im Dialogfeld "Verbindungseigenschaften" den Servernamen (z. B. (localdb)\mssqllocaldb) ein, wählen Sie die Authentifizierungsmethode aus, geben Sie "School " für den Datenbanknamen ein, und klicken Sie dann auf "OK". Das Dialogfeld "Datenverbindung auswählen" wird mit ihrer Datenbankverbindungseinstellung aktualisiert.
- Wählen Sie im Dialogfeld "Datenbankobjekte auswählen" unter dem Knoten "Tabellen" die Tabellen "Abteilung", "Kurs", "OnlineCourse" und "OnsiteCourse " aus.
- Klicken Sie auf Fertig stellen.
Der Entitäts-Designer, der eine Entwurfsoberfläche zum Bearbeiten des Modells bereitstellt, wird angezeigt. Alle Objekte, die Sie im Dialogfeld "Datenbankobjekte auswählen" ausgewählt haben, werden dem Modell hinzugefügt.
Implementiere Tabelle-pro-Typ-Vererbung
- Klicken Sie auf der Entwurfsoberfläche mit der rechten Maustaste auf den Entitätstyp "OnlineCourse ", und wählen Sie "Eigenschaften" aus.
- Legen Sie im Eigenschaftenfenster die Eigenschaft "Basistyp" auf "Kurs" fest.
- Klicken Sie mit der rechten Maustaste auf den Entitätstyp "OnsiteCourse ", und wählen Sie "Eigenschaften" aus.
- Legen Sie im Eigenschaftenfenster die Eigenschaft "Basistyp" auf "Kurs" fest.
- Klicken Sie mit der rechten Maustaste auf die Zuordnung (die Zeile) zwischen den Entitätstypen "OnlineCourse " und "Kurs ". Wählen Sie "Aus Modell löschen" aus.
- Klicken Sie mit der rechten Maustaste auf die Zuordnung zwischen den Entitätstypen "OnsiteCourse " und "Kurs ". Wählen Sie "Aus Modell löschen" aus.
Wir löschen nun die CourseID-Eigenschaft aus OnlineCourse und OnsiteCourse , da diese Klassen "CourseID " vom Basistyp "Kurs " erben.
- Klicken Sie mit der rechten Maustaste auf die CourseID-Eigenschaft des Entitätstyps "OnlineCourse ", und wählen Sie dann "Aus Modell löschen" aus.
- Klicken Sie mit der rechten Maustaste auf die CourseID-Eigenschaft des Entitätstyps "OnsiteCourse", und wählen Sie dann "Aus Modell löschen" aus.
- Die Tabelle-pro-Typ-Vererbung ist jetzt implementiert.
Modell verwenden
Öffnen Sie die Program.cs Datei, in der die Main-Methode definiert ist. Fügen Sie den folgenden Code in die Hauptfunktion ein. Der Code führt drei Abfragen aus. Die erste Abfrage gibt alle Kurse zurück, die mit der angegebenen Abteilung zusammenhängen. Die zweite Abfrage verwendet die OfType-Methode , um OnlineCourses im Zusammenhang mit der angegebenen Abteilung zurückzugeben. Die dritte Abfrage gibt OnsiteCourses zurück.
using (var context = new SchoolEntities())
{
foreach (var department in context.Departments)
{
Console.WriteLine("The {0} department has the following courses:",
department.Name);
Console.WriteLine(" All courses");
foreach (var course in department.Courses )
{
Console.WriteLine(" {0}", course.Title);
}
foreach (var course in department.Courses.
OfType<OnlineCourse>())
{
Console.WriteLine(" Online - {0}", course.Title);
}
foreach (var course in department.Courses.
OfType<OnsiteCourse>())
{
Console.WriteLine(" Onsite - {0}", course.Title);
}
}
}