Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03196.jsonl.gz/139

Entity Framework 4.1: 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 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<EntityType>-Klasse, die als Alternative zur ObjectSet<TEntity-Klasse eine einzelne Entität repräsentiert. Dank Methoden wie Add, Remove und Find erleichtert sie typische CRUD-Operationen (Create Read Update und Delete). Die «DBContext-API» wird in einer Beitragsserie von Arthur Vickers im ADO.NET-Teamblog ausführlich vorgestellt. Einen Eindruck bietet ein «Walkthrough», bei dem in einer Konsolenanwendung eine Datenbank aus einem Klassenmodell abgeleitet wird.
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<T>. 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<TEntity> ist eine vereinfachte Alternative zur ObjectSet<TEntity> 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<Gast>()
.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