Upgrade Entity Framework (EF) 4.0 auf 4.1


Ein Upgrade von Entity Framework 4.0 auf 4.1 ist recht einfach und mit wenigen Schritten zu bewerkstelligen und erfordert hier auch erst einmal keine weiteren Codeanpassungen (zumindest bei Meinem Projekt musste ich hier nichts anpassen). Code muss erst angepasst werden, wenn man statt dem bisherigen “ObjectContext” jetzt den “DbContext” nutzen möchte, welcher einige neuerungen zur Verfügung stellt, wie z.B. eine “Find” Methode oder das direkte Einstellen von No-Tracking in der Abfrage, dazu aber später mehr und erst einmal gehen ich auf das Upgrade ein.

Ich habe bei mir zuerst einmal über den NuGet Library Package Manager das EF 4.1 installiert. (Hier bin ich mir nicht ganz sicher ob dies wirklich notwendig ist.)

image

image

Danach habe ich dann das EF 4.1 von Microsoft heruntergeladen, damit mir auch die neue Codegenerierung für den “DbContext” zur Verfügung steht. Die Codegenerierung für den “DbContext” muss dann noch eingestellt werden, in dem man auf der Oberfläche unseres Klassendiagrammes mit der Rechten Maustaste “Neues Codegenerierungselement hinzufügen” klickt.

image

Und wenn das EF4.1 richtig installiert wurde, steht uns hier “ADO.NET DbContext Generator” zur Verfügung den wir auswählen und einen passenden Namen vergeben.

image

Bisher wurde das Klassenmodell für unsere edmx Datei direkt unterhalb der edmx Datei dargestellt. Wenn wir aber den “DbContext” nutzen, wird die Standardmäßige Codegenerierung ausgestellt und erfolgt dann unter den neuen “tt” Dateien und ist nicht mehr nur eine Datei wie im Beispiel die “EFModel.Designer.cs” sondern jede Klasse bekommt eine eigene Datei.

image

Wichtig zu wissen ist, das beim “DbContext” kein Connectionstring mehr an den Konstruktor übergeben wird, sondern der “DbContext”, sucht selbst nach dem passenden Connectionstring, anhand des Modelnamens. In meinem Beispiel wird nach einem Connectionstring mit dem Namen “EFModelContainer” entweder in der “App.config” oder bei Webanwendungen in der “Web.config” gesucht. Ich habe es leider nicht hinbekommen, das ich einen Connectionstring übergeben konnte, wenn jemand weiß wie das geht würde ich mich über einen Kommentar freuen :-). (Problem konnte ich hier lösen)

image

image

Am EF4.1 mit “DbContext” gefällt mir sehr gut, dass ich die Möglichkeit habe direkt nach dem Primärschlüssel einer Klasse zu suchen mit der “Find(id)” Methode, diese Möglichkeit bestand im EF4.0 nicht nativ und musste mittels Extension selbst geschrieben werden. Wenn man von einer Basisklasse im Modell ableitet, dann sieht ein Find z.B. Folgendermaßen aus:

image

EFPerson leitet von EFBase ab und EFBase enthält den Primärschlüssel die “id”. Um jetzt eine Person, von der man nur die Id kennt zu laden reicht folgendes Statement aus, das man ein Find über die EFBaseMenge ausführt und dann das ganze auf die EFPerson Castet. Funktioniert einwandfrei.

image

Dann gab es noch einen Guten Artikel in der .Net Pro 10.2011 – “Laden ohne Ballast” (auf Seite 92) von Dr. Holger Schwichtenberg über das No-Tracking im EF und das lässt sich mittelt EF4.1 auch sehr einfach abschalten.

image

Wenn das Tracking für eine Abfrage ausgeschalten wurde, dann bedeutet dies, wenn Änderungen in den Daten gemacht werden, dann werden diese beim nächsten Speichern nicht erkannt und somit auch nicht mit abgespeichert. Aber wenn man z.B. nur eine Liste mit Daten anzeigen möchte, dann kommt es bei ausgeschaltetem Tracking zu erheblichen Performance gewinnen. (Sehr schön nachzulesen in der .Net Pro)

Weitere Quellen und Interessante Links:

EF4.1 Download bei MS

Erstellen eines DbContextes mit EF4.1

EF4.1 Beispiele

Advertisements

Ein Gedanke zu „Upgrade Entity Framework (EF) 4.0 auf 4.1

  1. Pingback: EF 4.1 mit Connectionstring Initialisieren « SquadWuschel's Blog

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s