Designer-Tabellenaufteilung
Diese exemplarische Vorgehensweise zeigt, wie Sie mehrere Entitätstypen einer einzigen Tabelle zuordnen, indem Sie ein Modell mit dem Entity Framework-Designer (EF-Designer) ändern.
Ein Grund, warum Sie die Tabellenaufteilung verwenden sollten, ist die Verzögerung des Ladens einiger Eigenschaften, wenn Sie Ihre Objekte mit Lazy Loading laden. Sie können die Eigenschaften, die sehr große Datenmengen enthalten können, in eine separate Entität trennen und nur bei Bedarf laden.
Die folgende Abbildung zeigt die Hauptfenster, die beim Arbeiten mit dem EF Designer verwendet werden.
Voraussetzungen
Für diese exemplarische Vorgehensweise gelten folgende Voraussetzungen:
- Eine aktuelle Version von Visual Studio.
- Die Beispieldatenbank School.
Einrichten des Projekts
Diese exemplarische Vorgehensweise basiert auf Visual Studio 2012.
- Öffnen Sie Visual Studio 2012.
- Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
- Klicken Sie im linken Bereich auf „Visual C#“, und wählen Sie dann die Vorlage „Konsolenanwendung“ aus.
- Geben Sie TableSplittingSample als Namen des Projekts ein, und klicken Sie auf OK.
Erstellen eines Modells basierend auf der Datenbank „School“
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, klicken Sie auf Hinzufügen und anschließend auf Neues Element.
- Wählen Sie Daten im linken Menü aus, und wählen Sie dann im Bereich „Vorlagen“ ADO.NET Entity Data Model aus.
- Geben Sie TableSplittingModel für den Dateinamen ein, und klicken Sie dann auf Hinzufügen.
- Wählen Sie im Dialogfeld „Auswählen des Modellinhalts“ die Option Aus Datenbank generieren aus, und klicken Sie dann auf Weiter.
- Klicken Sie auf „Neue Verbindung“. Geben Sie im Dialogfeld „Verbindungseigenschaften“ den Servernamen ein (z. B. (localdb)\mssqllocaldb), wählen Sie die Authentifizierungsmethode aus, geben Sie School als Datenbanknamen ein, und klicken Sie dann auf OK. Das Dialogfeld „Datenverbindung auswählen“ wird mit Ihrer Datenbankverbindungseinstellung aktualisiert.
- Falten Sie im Dialogfeld „Datenbankobjekte auswählen“ den Knoten Tabellen auf, und aktivieren Sie die Tabelle Person. Dadurch wird dem School-Modell die angegebene Tabelle hinzugefügt.
- Klicken Sie auf Fertig stellen.
Der Entity Designer, der eine Entwurfsoberfläche zum Bearbeiten Ihres Modells bereitstellt, wird angezeigt. Alle Objekte, die Sie im Dialogfeld Datenbankobjekte auswählen ausgewählt haben, werden dem Modell hinzugefügt.
Zuordnen von zwei Entitäten zu einer einzelnen Tabelle
In diesem Abschnitt teilen Sie die Entität Person in zwei Entitäten auf und ordnen sie dann einer einzelnen Tabelle zu.
Hinweis
Die Entität Person enthält keine Eigenschaften, die eine große Datenmenge enthalten können; sie wird nur als Beispiel verwendet.
- Klicken Sie mit der rechten Maustaste auf einen leeren Bereich der Entwurfsoberfläche, zeigen Sie mit dem Mauszeiger auf Neu hinzufügen und klicken Sie auf Entität. Das Dialogfeld Neue Entität wird angezeigt.
- Geben Sie HireInfo für den Entitätsnamen und PersonID für den Namen der Key-Eigenschaft ein.
- Klicken Sie auf OK.
- Ein neuer Entitätstyp wird erstellt und auf der Entwurfsoberfläche angezeigt.
- Wählen Sie die Eigenschaft HireDate des Entitätstyps Person aus, und drücken Sie die Tasten STRG+X.
- Wählen Sie die Entität HireInfo aus und drücken Sie die Tasten Ctrl+V.
- Erstellen Sie eine Zuordnung zwischen Person und HireInfo. Klicken Sie dazu mit der rechten Maustaste auf einen leeren Bereich der Entwurfsoberfläche, zeigen Sie mit dem Mauszeiger auf Neu hinzufügen, und klicken Sie auf Zuordnung.
- Das Dialogfeld Zuordnung hinzufügen wird geöffnet. Der Name PersonHireInfo ist standardmäßig angegeben.
- Legen Sie die Multiplizität 1(Eins) an beiden Enden der Beziehung fest.
- Klicken Sie auf OK.
Für den nächsten Schritt wird das Fenster Mappingdetails verwendet. Wenn dieses Fenster ausgeblendet ist, klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche und wählen Sie Mappingdetails aus.
Wählen Sie den Entitätstyp HireInfo aus, und klicken Sie im Fenster <Mappingdetails> auf Tabelle oder Ansicht hinzufügen.
Wählen Sie Person aus der Dropdownliste für das Feld <Tabelle oder Ansicht hinzufügen> aus. Die Liste enthält Tabellen oder Ansichten, denen die ausgewählte Entität zugeordnet werden kann. Die entsprechenden Eigenschaften sollten standardmäßig zugeordnet sein.
Wählen Sie die Zuordnung PersonHireInfo auf der Entwurfsoberfläche aus.
Klicken Sie mit der rechten Maustaste auf Zuordnung auf der Entwurfsoberfläche, und wählen Sie Eigenschaften aus.
Wählen Sie im Fenster Eigenschaften die Eigenschaft Referenzielle Einschränkungen aus, und klicken Sie auf die Schaltfläche mit den Auslassungspunkten.
Wählen Sie im Dropdown-Listenfeld Prinzipal den Eintrag Person aus.
Klicken Sie auf OK.
Verwenden des Modells
- Fügen Sie den folgenden Code in der Main-Methode ein.
using (var context = new SchoolEntities())
{
Person person = new Person()
{
FirstName = "Kimberly",
LastName = "Morgan",
Discriminator = "Instructor",
};
person.HireInfo = new HireInfo()
{
HireDate = DateTime.Now
};
// Add the new person to the context.
context.People.Add(person);
// Insert a row into the Person table.
context.SaveChanges();
// Execute a query against the Person table.
// The query returns columns that map to the Person entity.
var existingPerson = context.People.FirstOrDefault();
// Execute a query against the Person table.
// The query returns columns that map to the Instructor entity.
var hireInfo = existingPerson.HireInfo;
Console.WriteLine("{0} was hired on {1}",
existingPerson.LastName, hireInfo.HireDate);
}
- Kompilieren Sie die Anwendung, und führen Sie sie aus.
Die folgenden T-SQL-Anweisungen wurden aufgrund der Ausführung dieser Anwendung für die Datenbank School ausgeführt.
Der folgende INSERT wurde als Ergebnis der Ausführung von context.SaveChanges() ausgeführt und kombiniert Daten aus den Entitäten Person und HireInfo
Der folgende SELECT wurde als Ergebnis der Ausführung von context.People.FirstOrDefault() ausgeführt und wählt nur die Spalten aus, die Person zugeordnet sind
Der folgende SELECT wurde als Ergebnis des Zugriffs auf die Navigationseigenschaft existingPerson.Instructor ausgeführt und wählt nur die Spalten aus, die HireInfo zugeordnet sind