Designer-Entitätsaufteilung

In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie einen Entitätstyp zwei Tabellen zuordnen, indem Sie ein Modell mit dem Entity Framework Designer (EF Designer) ändern. Sie können eine Entität mehreren Tabellen zuordnen, sofern für die Tabellen ein gemeinsamer Schlüssel vorhanden ist. Die Prinzipien, nach denen ein Entitätstyp zwei Tabellen zugeordnet wird, lassen sich leicht auf das Mapping zu mehr als zwei Tabellen erweitern.

Die folgende Abbildung zeigt die Hauptfenster, die beim Arbeiten mit dem EF Designer verwendet werden.

EF Designer

Voraussetzungen

Visual Studio 2012 oder Visual Studio 2010, Ultimate, Premium, Professional oder Web Express Edition.

Erstellen der Datenbank

Der Datenbankserver, der mit Visual Studio installiert ist, unterscheidet sich je nach der installierten Version von Visual Studio:

  • Wenn Sie Visual Studio 2012 verwenden, erstellen Sie eine LocalDB-Datenbank.
  • Wenn Sie Visual Studio 2010 verwenden, erstellen Sie eine SQL Express-Datenbank.

Zunächst erstellen wir eine Datenbank mit zwei Tabellen, die wir in einer einzigen Entität kombinieren werden.

  • Öffnen Sie Visual Studio.
  • Ansicht –>Server-Explorer
  • Klicken Sie mit der rechten Maustaste auf Datenverbindungen –>Verbindung hinzufügen….
  • Wenn Sie im Server-Explorer noch keine Verbindung mit einer Datenbank hergestellt haben, müssen Sie Microsoft SQL Server als Datenquelle auswählen.
  • Herstellen einer Verbindung mit LocalDB oder SQL Express, je nachdem, welches Sie installiert haben.
  • Geben Sie EntitySplitting als Datenbanknamen ein.
  • Wählen Sie OK aus, und Sie werden gefragt, ob Sie eine neue Datenbank erstellen möchten, wählen Sie Ja aus.
  • Die neue Datenbank wird nun im Server-Explorer angezeigt.
  • Bei Verwendung von Visual Studio 2012
    • Klicken Sie im Server-Explorer mit der rechten Maustaste auf die Datenbank, und wählen Sie Neue Abfrage aus.
    • Kopieren Sie die folgende SQL-Datei in die neue Abfrage, klicken Sie dann mit der rechten Maustaste auf die Abfrage, und wählen Sie Ausführen aus.
  • Bei Verwendung von Visual Studio 2010
    • Wählen Sie Daten –>Transact SQL Editor –>Neue Abfrageverbindung... aus.
    • Geben Sie .\SQLEXPRESS als Servernamen ein, und klicken Sie auf OK.
    • Wählen Sie die EntitySplitting-Datenbank aus der Dropdownliste oben im Abfrage-Editor aus.
    • Kopieren Sie die folgende SQL-Datei in die neue Abfrage, klicken Sie dann mit der rechten Maustaste auf die Abfrage, und wählen Sie SQL ausführen aus.
CREATE TABLE [dbo].[Person] (
[PersonId] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (200) NULL,
[LastName] NVARCHAR (200) NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId] ASC)
);

CREATE TABLE [dbo].[PersonInfo] (
[PersonId] INT NOT NULL,
[Email] NVARCHAR (200) NULL,
[Phone] NVARCHAR (50) NULL,
CONSTRAINT [PK_PersonInfo] PRIMARY KEY CLUSTERED ([PersonId] ASC),
CONSTRAINT [FK_Person_PersonInfo] FOREIGN KEY ([PersonId]) REFERENCES [dbo].[Person] ([PersonId]) ON DELETE CASCADE
);

Erstellen des Projekts

  • 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 MapEntityToTablesSample als Namen des Projekts ein, und klicken Sie auf OK.
  • Klicken Sie auf Nein, wenn Sie aufgefordert werden, die im ersten Abschnitt erstellte SQL-Abfrage zu speichern.

Erstellen eines Modells basierend auf der Datenbank

  • 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 MapEntityToTablesModel.edmx 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.
  • Wählen Sie die EntitySplitting-Verbindung aus der Dropdownliste aus, und klicken Sie auf Weiter.
  • Aktivieren Sie im Dialogfeld „Datenbankobjekte auswählen“ das Kontrollkästchen neben dem Knoten Tabellen. Dadurch werden alle Tabellen aus der EntitySplitting-Datenbank zum Modell hinzugefügt.
  • Klicken Sie auf Fertig stellen.

Der Entity Designer, der eine Entwurfsoberfläche zum Bearbeiten des Modells bereitstellt, wird angezeigt.

Zuordnen einer Entität zwei Tabellen

In diesem Schritt aktualisieren wir den Entitätstyp Person, um Daten aus den Tabellen Person und PersonInfo zu kombinieren.

  • Wählen Sie die Eigenschaften E-Mail und Telefon der Entität **PersonInfo **, und drücken Sie STRG+X.

  • Wählen Sie die Entität **Person ** aus, und drücken Sie STRG+V.

  • Wählen Sie auf der Entwurfsoberfläche die PersonInfo-Entität aus, und drücken Sie Schaltfläche Löschen auf der Tastatur.

  • Klicken Sie auf Nein, wenn Sie gefragt werden, ob Sie die Tabelle PersonInfo aus dem Modell entfernen möchten. Wir sind dabei, sie der Entität Person zuzuordnen.

    Delete Tables

Für die nächsten Schritte 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 Person aus, und klicken Sie im Fenster <Mappingdetails> auf Tabelle oder Ansicht hinzufügen.
  • Wählen Sie **PersonInfo ** aus der Dropdownliste aus. Das Fenster Mappingdetails wird mit Standardspaltenzuordnungen aktualisiert. Diese eignen sich gut für unser Szenario.

Der Entitätstyp Person ist jetzt den Tabellen Person und PersonInfo zugeordnet.

Mapping 2

Verwenden des Modells

  • Fügen Sie den folgenden Code in der Main-Methode ein.
    using (var context = new EntitySplittingEntities())
    {
        var person = new Person
        {
            FirstName = "John",
            LastName = "Doe",
            Email = "john@example.com",
            Phone = "555-555-5555"
        };

        context.People.Add(person);
        context.SaveChanges();

        foreach (var item in context.People)
        {
            Console.WriteLine(item.FirstName);
        }
    }
  • 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 ausgeführt. 

  • Die folgenden beiden INSERT-Anweisungen wurden als Ergebnis der Ausführung von „context.SaveChanges“ ausgeführt. Sie nehmen die Daten aus der Entität Person und teilen sie zwischen den Tabellen Person und PersonInfo.

    Insert 1

    Insert 2

  • Die folgende SELECT-Anweisung wurde als Ergebnis der Aufzählung der Personen in der Datenbank ausgeführt. Sie kombiniert die Daten aus den Tabellen Person und PersonInfo.

    Select Combining Person and PersonInfo Data