Enumerationsunterstützung – EF Designer

Hinweis

Nur EF5 und höher: Die Features, APIs usw., die auf dieser Seite erläutert werden, wurden in Entity Framework 5 eingeführt. Wenn Sie eine frühere Version verwenden, gelten manche Informationen nicht.

In diesem Video und schrittweisen exemplarischen Vorgehensweise wird gezeigt, wie Enumerationstypen mit dem Entity Framework-Designer verwendet werden. Außerdem wird veranschaulicht, wie Enumeration in einer LINQ-Abfrage verwendet wird.

In dieser exemplarischen Vorgehensweise wird Model First verwendet, um eine neue Datenbank zu erstellen, aber der EF-Designer kann auch mit dem Workflow Database First verwendet werden, um einer vorhandenen Datenbank zuzuordnen.

Die Enumerationsunterstützung wurde in Entity Framework 5 eingeführt. Um die neuen Features wie Enumerationen, räumliche Datentypen und Tabellenwertfunktionen zu verwenden, müssen Sie .NET Framework 4.5 verwenden. Visual Studio 2012 zielt standardmäßig auf .NET 4.5 ab.

In Entity Framework kann eine Enumeration die folgenden zugrunde liegenden Typen aufweisen: Byte, Int16, Int32, Int64 oder SByte.

Video ansehen

In diesem Video wird gezeigt, wie Enumerationstypen mit dem Entity Framework-Designer verwendet werden. Außerdem wird veranschaulicht, wie Enumeration in einer LINQ-Abfrage verwendet wird.

Präsentiert von: Julia Kornich

Video: WMV | MP4 | WMV (ZIP)

Voraussetzungen

Sie müssen Visual Studio 2012, Ultimate, Premium, Professional oder Web Express Edition installiert haben, um diese exemplarische Vorgehensweise abzuschließen.

Einrichten des Projekts

  1. Öffnen Sie Visual Studio 2012
  2. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt
  3. Klicken Sie im linken Bereich auf Visual C#, und wählen Sie dann die Konsolenvorlage aus
  4. Geben Sie EnumEFDesigner als Namen des Projekts ein, und klicken Sie auf OK

Erstellen eines neuen Modells mithilfe des EF-Designers

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, klicken Sie auf Hinzufügen und anschließend auf Neues Element
  2. Wählen Sie Daten im linken Menü aus, und wählen Sie dann im Bereich „Vorlagen“ ADO.NET Entity Data Model aus
  3. Geben Sie EnumTestModel.edmx für den Dateinamen ein, und klicken Sie dann auf Hinzufügen
  4. Wählen Sie auf der Seite des Entity Data Model-Assistenten im Dialogfeld „Modellinhalt auswählen“ die Option Leeres Modellinhalt aus
  5. Klicken Sie auf Fertig stellen.

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

Der Assistent führt die folgenden Aktionen aus:

  • Die Datei EnumTestModel.edmx, die das konzeptionelle Modell, das Speichermodell und die Zuordnungen zwischen beiden Modellen definiert, wird generiert. Setzt die Eigenschaft „Verarbeitung von Metadaten-Artefakten“ der EDMX-Datei auf „In Ausgabebaugruppe einbetten“, damit die generierten Metadaten-Dateien in die Baugruppe eingebettet werden.
  • Fügt einen Verweis auf die folgenden Assemblys hinzu: EntityFramework, System.ComponentModel.DataAnnotations und System.Data.Entity.
  • Erstellt EnumTestModel.tt- und EnumTestModel.Context.tt-Dateien und fügt sie unter der EDMX-Datei hinzu. Diese T4-Vorlagendateien generieren den Code, der den von DbContext abgeleiteten Typ und POCO-Typen definiert, die den Entitäten im EDMX-Modell zugeordnet sind.

Hinzufügen eines neuen Entitätstyps

  1. Klicken Sie mit der rechten Maustaste auf einen leeren Bereich der Entwurfsoberfläche, wählen Sie Hinzufügen ->Entität aus und das Dialogfeld „Neue Entität“ wird angezeigt
  2. Geben Sie Abteilung als Typname und AbteilungID als Schlüsseleigenschaftsname an, lassen Sie den Typ als Int32
  3. Wählen Sie OK aus.
  4. Klicken Sie mit der rechten Maustaste auf die Entität, und wählen Sie Neu hinzufügen -> Skalareigenschaft aus
  5. Benennen Sie die neue Eigenschaft in Name um
  6. Ändern Sie den Typ der neuen Eigenschaft in Int32 (standardmäßig ist die neue Eigenschaft vom Typ „Zeichenfolge“) Um den Typ zu ändern, öffnen Sie das Eigenschaftenfenster, und ändern Sie die Type-Eigenschaft in Int32
  7. Fügen Sie eine weitere skalare Eigenschaft hinzu, und benennen Sie sie in Budget um, ändern Sie den Typ in Dezimal

Enumerationstyp hinzufügen

  1. Klicken Sie im Entity Framework-Designer mit der rechten Maustaste auf die Name-Eigenschaft, und wählen Sie Konvertieren in Enumeration aus

    Convert To Enum

  2. Geben Sie im Dialogfeld Enumeration hinzufügen DepartmentNames für den Enumerationstypnamen ein, ändern Sie den zugrunde liegenden Typ in Int32, und fügen Sie dann die folgenden Member zum Typ hinzu: Englisch, Mathematik und BWL

    Add Enum Type

  3. Klicken Sie auf OK

  4. Speichern des Modells und Erstellen des Projekts

    Hinweis

    Beim Erstellen können Warnungen zu nicht zugeordneten Entitäten und Zuordnungen in der Fehlerliste angezeigt werden. Sie können diese Warnungen ignorieren, da nach der Auswahl, die Datenbank aus dem Modell zu generieren, die Fehler nicht mehr auftreten.

Wenn Sie sich das Eigenschaftenfenster ansehen, werden Sie feststellen, dass der Typ der Eigenschaft „Name“ in DepartmentNames geändert wurde und der neu hinzugefügte Enumerationstyp der Liste der Typen hinzugefügt wurde.

Wenn Sie zum Fenster „Modellbrowser“ wechseln, sehen Sie, dass der Typ auch dem Knoten „Enumerationstypen“ hinzugefügt wurde.

Model Browser

Hinweis

Sie können auch neue Enumerationstypen aus diesem Fenster hinzufügen, indem Sie auf die rechte Maustaste klicken und Enumerationstyp hinzufügen auswählen. Sobald der Typ erstellt wurde, wird er in der Liste der Typen angezeigt, und Sie können einer Eigenschaft zuordnen

Datenbank anhand des Modells generieren

Jetzt können wir eine Datenbank generieren, die auf dem Modell basiert.

  1. Klicken Sie mit der rechten Maustaste an einer leeren Stelle der Entity Designer-Oberfläche, und wählen Sie Datenbank aus Modell generieren aus
  2. Das Dialogfeld „Datenverbindung auswählen“ des Assistenten „Datenbank generieren“ wird angezeigt Klicken Sie auf die Schaltfläche Neue Verbindung Geben Sie '(localdb)\mssqllocaldb ' für den Servernamen und EnumTest für die Datenbank ein, und klicken Sie auf OK
  3. Ein Dialogfeld, in dem Sie gefragt werden, ob eine neue Datenbank erstellt werden soll, klicken Sie auf Ja.
  4. Klicken Sie auf Weiter, und der Assistent zum Erstellen von Datenbanken generiert Datendefinitionssprache (Data Definition Language, DDL) zum Erstellen einer Datenbank Die generierte DDL wird im Dialogfeld „Zusammenfassung und Einstellungen“ angezeigt Beachten Sie, dass die DDL keine Definition für eine Tabelle enthält, die dem Enumerationstyp zugeordnet ist
  5. Klicken Sie auf Fertigstellen Durch das Klicken auf „Fertigstellen“ wird das DDL-Skript nicht ausgeführt.
  6. Der Assistent zum Erstellen von Datenbanken führt folgendes aus: Öffnet die EnumTest.edmx.sql im T-SQL-Editor Generiert das Speicherschema und Zuordnungsabschnitte der EDMX-Datei Fügt der Datei „App.config“ Informationen über die Verbindungszeichenfolgen hinzu
  7. Klicken Sie im T-SQL-Editor auf die rechte Maustaste, und wählen Sie Ausführen aus Es öffnet sich das Dialogfeld „Verbindung mit dem Server herstellen“, geben Sie die Verbindungsinformationen aus Schritt 2 ein, und klicken Sie auf Verbinden
  8. Um das generierte Schema anzuzeigen, klicken Sie im Objekt-Explorer des SQL Servers mit der rechten Maustaste auf den Datenbanknamen, und wählen Sie Aktualisieren aus

Speichern und Abrufen von Daten

Öffnen Sie die Datei „Program.cs“, in der die Main-Methode definiert ist. Fügen Sie der Hauptfunktion den folgenden Code hinzu. Der Code fügt dem Kontext ein neues Department-Objekt hinzu. Anschließend werden die Daten gespeichert. Der Code führt auch eine LINQ-Abfrage aus, die eine Abteilung zurückgibt, in der der Name „DepartmentNames.English“ lautet.

using (var context = new EnumTestModelContainer())
{
    context.Departments.Add(new Department{ Name = DepartmentNames.English });

    context.SaveChanges();

    var department = (from d in context.Departments
                        where d.Name == DepartmentNames.English
                        select d).FirstOrDefault();

    Console.WriteLine(
        "DepartmentID: {0} and Name: {1}",
        department.DepartmentID,  
        department.Name);
}

Kompilieren Sie die Anwendung, und führen Sie sie aus. Das Programm erzeugt die folgende Ausgabe:

DepartmentID: 1 Name: English

Um Daten in der Datenbank anzuzeigen, klicken Sie im Objekt-Explorer des SQL Servers mit der rechten Maustaste auf den Datenbanknamen, und wählen Sie Aktualisieren aus. Klicken Sie dann auf die rechte Maustaste auf der Tabelle, und wählen Sie Daten anzeigen.

Zusammenfassung

In dieser exemplarischen Vorgehensweise haben wir untersucht, wie Enumerationstypen mithilfe des Entity Framework-Designers zugeordnet und wie Enumerationen im Code verwendet werden.