Entity Framework 4.1 28.05.2011, 00:00 Uhr

CodeFirst und mehr Komfort

Microsoft hat jüngst die Version 4.1 des Entity Framework freigegeben: Sie bringt eine entwicklerfreundliche API und die Option mit, Datenbanken aus dem Klassenmodell ableiten zu können.
Die Entity Framework 4.1-Assemblies werden am einfachsten über den Package Manager hinzugefügt
Die neue Version 4.1 von Entity Framework bringt eine Reihe optionaler Verbesserungen. Die wichtigste Neuerung ist die DBContext-Klasse als «leichtgewichtigere» Alternative zur ObjectContext-Klasse – die auch für den «Database First»- und «Model First»-Ansatz zur Verfügung steht. Ergänzt wird DbContext durch die DBSet-Klasse, die als Alternative zur ObjectSet

Code First

Bislang bot das Entity Framework mit «Model First» und «Database First» zwei Ansätze, um zu einer Objektschicht zu kommen, über die die Objekte der Anwendung in einer Datenbank persistiert werden können. Bei Version 4.1 kommt mit «Code First» ein dritter Ansatz dazu. Dieser bietet die Möglichkeit aus einem Klassenmodell eine Datenbank abzuleiten, ohne dass ein Mapping – also eine Zuordnung zwischen den Klassen und den Entitäten eines Modells – definiert werden muss. Als Datenbanken stehen SQL Server und SQL Server Compact Edition zur Auswahl. Die aktuellen Versionen der ADO.NET-Treiber der Firma DevArt für Oracle, MySql, PostgreSql und Sqlite unterstützen den neuen «Code First»-Ansatz bereits.

Die DBContext-API

Mit Entity Framework 4.1 gehen zwei neue Klassen einher: DBContext und DBSet. Beide sind Teil des Namespace System.Data.Entity. Über die DBContext-Klasse wird aus dem Klassenmodell mit dem ersten Aufruf von SaveChanges() eine Datenbank abgeleitet und die Klassen auf Tabellen abgebildet. Die Verbindungsinformationen zur Datenbank werden über einen Eintrag in der Config-Datei der Anwendung hinterlegt. DBSet ist eine vereinfachte Alternative zur ObjectSet Klasse aus dem Standard-Namespace System.Data.Objects, die Mitglieder wie Add oder Remove für das Durchführen von CRUD-Operationen (Create Read Update Delete) anbietet. Die DBContext-Klasse bringt eine weitere Neuerung mit, die mehr Komfort beim Definieren eines Datenmodells verspricht. Anstatt Detailangaben wie Primärschlüssel, Pflichtfelder oder Zuordnungen zu Tabellen einer Datenbank über Attributklassen innerhalb der Klassendefinitionen vornehmen zu müssen (den «Data Annotations», die auf Klassen im Namespace System.ComponentModel.DataAnnotations basieren) gibt es die Möglichkeit, diese Angaben direkt im Code mit Hilfe von Lambdas vorzunehmen. Diese wählen jene Entitäten aus, die um Angaben wie «HasKey» für das Festlegen eines Primärschlüsselfeldes erweitert werden sollen. Die «Fluent API» wird durch Überschreiben der OnModelCreating-Methode in der DBContext-Klasse angesprochen. Eine Beispiel veranschaulicht das Vorgehen. Die folgende Befehlsfolge legt fest, dass die Property GastID der Entität Gast die Rolle des Primärschlüssels spielen soll: modelBuilder.Entity() .HasKey(g => g.GastID); Eine interessante Erweiterung bietet die Firma DevArt an. Sie besteht aus einem Template für DBContext, mit dem die «Fluent API» auch beim «Database First»- und «Model First»-Ansatz zur Verfügung steht. Nächste Seite: Entity Framework in der Praxis

Entity Framework 4.1 einsetzen

Das Entity Framework 4.1 besteht aus einer Assembly EntityFramework.dll. Sie muss entweder nachträglich hinzugefügt oder ausgetauscht werden, um eine CTP-Version zu ersetzen. Beim Anlegen eines ASP.NET MVC3-Projekts wird von Anfang ein Version auf die Version 4.1 eingefügt.
Der einfachste Weg, sie zu einem Projekt hinzufügen, besteht darin, dafür den NuGet-Package-Manager zu verwenden, der über die Visual-Studio-Gallery nachträglich installiert werden muss. In diesem Fall genügt der Aufruf von Install-Package EntityFramework in der PackageManager-Konsole, um alle benötigten Verweise einzufügen.

SQL Server Compact Edition 4.0

Neben SQL Server kommt für Code First auch SQL Server Compact Edition in Frage. Die Compact-Version ist für viele Anwendungen attraktiv, da es sich um eine einfache, dateibasierte Datenbank handelt, die keine Server-Installation voraussetzt, und dieselben Datentypen und SQL-Syntax verwendet wie SQL Server. Allerdings gibt es zum Beispiel keine Stored Procedures. Die neuste Version 4.0 von SQL Server Compact Edition wird in Visual Studio 2010 allerdings erst ab SP1 unterstützt.
Ausserdem müssen über den WebPlatform-Installer die «Visual Studio 2010 SP1 Tools for SQL Server Compact 4» nachinstalliert werden. Anschliessend lässt sich eine Datenbank im Server-Explorer ansprechen. SQL Server Management Studio 2008 unterstützt diesen Datenbanktyp nicht. Eine weitere sinnvolle Erweiterung ist die SQL Server Compact Toolbox, die über die Visual Studio Gallery angeboten wird, allerdings existiert auch eine Standalone-Version. Eine weitere Möglichkeit, SQL-Server-Compact-Edition-Datenbanken zu bearbeiten, bietet Microsofts WebMatrix.

Entity Framework PowerTools als CTP

Microsofts Entwicklerteam für das Entity Framework kümmert sich auch um eine bessere Integration in Visual Studio. So steht in der Visual Studio Gallery die erste CTP der Entity Framework PowerTools zum Download bereit. Sie erweitern das Kontextmenü des Projektmappen Explorers um mehrere Einträge, mit denen sich zum Beispiel ein Klassenmodell aus einer Datenbank oder ein Entitätsmodell aus einem Klassenmodell ableiten lässt.

Zusammenfassung

Mit der Version 4.1 des Entity Framework bietet Microsoft Entwicklern eine vereinfachte und «saubere» API, bei der sich Entwickler nicht mit Attributen oder Konfigurationsdateien beschäftigen müssen. Dafür wurde das Framework in der aktuellen Version nicht verändert, sondern lediglich verfeinert. Mit dem «Code First»-Ansatz wird das Entity Framework auch für die Entwickler interessant, die bislang noch keinen ORM (Objektrelationaler Mapper) verwendet haben, weil ihnen der Ansatz entweder zu komplex oder zu «neumodisch» erschien. Allerdings kann das Persistieren beliebiger Objekte in eine Datenbank kaum noch einfacher werden.
Peter Monadjemi


Das könnte Sie auch interessieren