Enumerationsunterstützung – Code First
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 dieser exemplarischen Vorgehensweise wird Schritt für Schritt gezeigt, wie Enumerationstypen mit Entity Framework Code First verwendet werden. Außerdem wird veranschaulicht, wie Enumerationen in einer LINQ-Abfrage verwendet werden.
In dieser exemplarischen Vorgehensweise wird Code First zum Erstellen einer neuen Datenbank verwendet. Sie können Code First aber auch für Zuordnungen zu einer vorhandenen Datenbank verwenden.
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 als Ziel festlegen. Visual Studio 2012 verwendet .NET 4.5 standardmäßig als Ziel.
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 Entity Framework Code First verwendet werden. Außerdem wird veranschaulicht, wie Enumerationen in einer LINQ-Abfrage verwendet werden.
Präsentiert von: Julia Kornich
Voraussetzungen
Sie müssen Visual Studio 2012 Ultimate, Premium, Professional oder Web Express Edition installiert haben, um diese exemplarische Vorgehensweise zu absolvieren.
Einrichten des Projekts
- Ö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 Konsolenvorlage aus.
- Geben Sie EnumCodeFirst als Namen des Projekts ein, und klicken Sie auf OK.
Definieren eines neuen Modells mithilfe von Code First
Bei der Code-First-Entwicklung beginnen Sie in der Regel mit dem Schreiben von .NET Framework-Klassen, die Ihr konzeptionelles Modell (Domänenmodell) definieren. Der folgende Code definiert die Department-Klasse.
Der Code definiert auch die DepartmentNames-Enumeration. Standardmäßig hat die Enumeration den Typ int. Die Name-Eigenschaft der Department-Klasse hat den Typ „DepartmentNames“.
Öffnen Sie die Datei „Program.cs“, und fügen Sie die folgenden Klassendefinitionen ein:
public enum DepartmentNames
{
English,
Math,
Economics
}
public partial class Department
{
public int DepartmentID { get; set; }
public DepartmentNames Name { get; set; }
public decimal Budget { get; set; }
}
Definieren des abgeleiteten DbContext-Typs
Zusätzlich zur Definition von Entitäten müssen Sie eine Klasse definieren, die von DbContext abgeleitet ist und DbSet<TEntity>-Eigenschaften bereitstellt. Die DbSet<TEntity>-Eigenschaften informieren den Kontext darüber, welche Typen Sie in das Modell einbeziehen möchten.
Eine Instanz des von DbContext abgeleiteten Typs verwaltet die Entitätsobjekte während der Laufzeit, was das Auffüllen der Objekte mit Daten aus einer Datenbank, die Änderungsnachverfolgung und das persistente Speichern von Daten in der Datenbank umfasst.
Die Typen „DbContext“ und „DbSet“ werden in der EntityFramework-Assembly definiert. Fügen Sie mithilfe des NuGet-Pakets „EntityFramework“ einen Verweis auf diese DLL hinzu.
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen.
- Wählen Sie NuGet-Pakete verwalten... aus.
- Wählen Sie im Dialogfeld „NuGet-Pakete verwalten“ die Registerkarte Online und dann das Paket EntityFramework aus.
- Klicken Sie auf Install (Installieren).
Beachten Sie, dass zusätzlich zur EntityFramework-Assembly auch Verweise auf die Assemblys „System.ComponentModel.DataAnnotations“ und „System.Data.Entity“ hinzugefügt werden.
Fügen Sie oben in der Datei „Program.cs“ die folgende using-Anweisung hinzu:
using System.Data.Entity;
Fügen Sie in „Program.cs“ die Kontextdefinition hinzu.
public partial class EnumTestContext : DbContext
{
public DbSet<Department> Departments { get; set; }
}
Speichern und Abrufen von Daten
Öffnen Sie die Datei „Program.cs“, in der die Main-Methode definiert ist. Fügen Sie der Funktion „Main“ 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, deren Name „DepartmentNames.English“ lautet.
using (var context = new EnumTestContext())
{
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} 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
Anzeigen der generierten Datenbank
Wenn Sie die Anwendung zum ersten Mal ausführen, erstellt Entity Framework eine Datenbank für Sie. Da Visual Studio 2012 installiert ist, wird die Datenbank in der LocalDB-Instanz erstellt. Standardmäßig benennt Entity Framework die Datenbank nach dem vollqualifizierten Namen des abgeleiteten Kontexts (für dieses Beispiel: EnumCodeFirst.EnumTestContext). Bei nachfolgenden Ausführungen wird die vorhandene Datenbank verwendet.
Wenn Sie Änderungen am Modell vornehmen, nachdem die Datenbank erstellt wurde, sollten Sie Code-First-Migrationen verwenden, um das Datenbankschema zu aktualisieren. Ein Beispiel für die Verwendung von Migrationen finden Sie unter Code First für eine neue Datenbank.
Gehen Sie wie folgt vor, um die Datenbank und die Daten anzuzeigen:
- Wählen Sie im Hauptmenü von Visual Studio 2012 Ansicht > SQL Server-Objekt-Explorer aus.
- Wenn LocalDB nicht in der Liste der Server enthalten ist, klicken Sie auf der rechten Maustaste auf SQL Server, und wählen Sie SQL Server hinzufügen aus. Verwenden Sie die übliche Windows-Authentifizierung, um eine Verbindung mit der LocalDB-Instanz herzustellen.
- Erweitern des LocalDB-Knotens
- Erweitern Sie den Ordner Datenbanken, um die neue Datenbank anzuzeigen und zur Tabelle Department zu navigieren. Beachten Sie, dass Code First keine Tabelle erstellt, die dem Enumerationstyp zugeordnet ist.
- Klicken Sie mit der rechten Maustaste auf die Tabelle, und wählen Sie Daten anzeigen aus, um die Daten anzuzeigen.
Zusammenfassung
In dieser exemplarischen Vorgehensweise wurde erläutert, wie Enumerationstypen mit Entity Framework Code First verwendet werden.