Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Entity Framework Core Grundkurs

Einsatz in einer ASP.NET-Core-Anwendung

Testen Sie unsere 2021 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Das Entity Framework Core kann im Gegensatz zum Entity Framework 6 in einer ASP.NET-Core-Anwendung genutzt werden. Dazu muss jedoch Dependency Injection für das Entity Framework konfiguriert werden. Wie solch vollständige Integration abläuft, zeigt dieser Film.
13:27

Transkript

Zu den exklusiven Features des Entity Framework Core, die im Entity Framework 6 nicht vorhanden sind, gehört die Unterstützung des Entity Framework Core in einer ASP.NET Core-Anwendung. Und wie dies ausschaut, wie Sie also das Entity Framework Core in einer ASP.NET Core-Anwendung nutzen können, das werden wir uns in diesem Video ansehen. Meine ASP.NET Core-Anwendung werde ich jetzt in meinem Fall mit Visual Studio erstellen. Visual Studio habe ich schon geöffnet und bin im Dialog "Neues Projekt anlegen" und wähle hier im Bereich "Web" ASP.NET Core Web Application aus. Falls Ihnen dieser Eintrag fehlt, dann müssen Sie zuvor mindestens Visual Studio 2015 Update 3 installiert haben, Plus das Update für die ASP.NET Core-Unterstützung. Ich gebe hier unten meinem Projekt einen Namen und klicke auf "Ok". Jetzt kann ich hier zwischen verschiedenen Vorlagen auswählen. Und da ich eine Web-Anwendung mit einer MVC-Oberfläche erstellen möchte, wähle ich hier die letzte Vorlage aus und wähle wieder "Ok". Ich habe nun ein neues Projekt erhalten. Und in diesem Projekt läuft erst einmal die Paket-Wiederherstellung. Bedeutet also, die im Projekt verwiesenen Pakete werden jetzt nach und nach installiert. Das Ganze ist jetzt soweit abgeschlossen. Ich kompiliere einmal und prüfe, ob die Anwendung läuft. Und das sieht sehr gut aus. Bedeutet, jetzt kann ich loslegen und das Entity Framework zu meiner Anwendung hinzufügen. Und dazu gehe ich zuerst in die Paket-Manager-Konsole. Und in der Paket-Manager-Konsole gebe ich den Befehl ein zum Installieren des Entity Framework Core mit SQL Server-Unterstützung. Das wäre Install-Package Microsoft.EntityFrameworkCore.SqlServer Anschließend installiere ich noch die Tools. Und da ich bereits eine bestehende Datenbank habe, die ich gerne Reverse Engineering möchte, aus der ich mir also einen Kontext erzeugen lassen möchte, deswegen installiere ich hier noch die Design-Werkzeuge für die SQL Server-Unterstützung. Nachdem das nun erledigt ist, muss ich nun noch die project.json-Datei öffnen. Und in dieser Datei gibt es einen Abschnitt "Tools". Und in diesem Abschnitt muss ich nun noch die Entity Framework Tools hinzufügen. Das ist also der Eintrag Microsoft.EntityFrameworkCore.Tools, und zwar in der Version aktuell 1.0.0-preview2-final Das ist also genau der gleiche Versionseintrag, wie wir ihn auch hier unten bei den IISIntegration Tools und bei den Razor Tools sehen. So, ganz wichtig: die Datei muss nun gespeichert werden. Anschließend erfolgt die Paket-Wiederherstellung. Und nachdem dies erledigt ist, kann ich jetzt meinen DbContext erzeugen. Und dazu gehe ich wie folgt vor. In der Paket-Manager-Konsole nutze ich den Befehl Scaffold-DbContext. Und als erstes muss ich den Connection String übergeben und hier ist der Server in meinem Fall die LocalDb. Und die Datenbank heißt "Fahrtenbuch". Das ist die Datenbank, die ich schon angelegt habe bei mir auf dem Server. Außerdem habe ich hier eine Trusted_Connection. Und ich möchte, dass das Output Directory, also der Ordner, in dem später mein Kontext erzeugt wird, der Ordner "Models" ist. So, und da fehlte noch der Provider-Eintrag. Und der Provider-Eintrag ist Microsoft.EntityFrameworkCore.SqlServer Und jetzt verbindet sich dieses Cmdlet mit meiner Datenbank und hat mir jetzt hier einen Kontext erzeugt. Neben dem Kontext habe ich auch Modell-Klassen erhalten, in meinem Fall für den Fahrer, für die Fahrten und auch für die Fahrzeuge. Innerhalb des Kontextes gibt es eine Methode "OnConfiguring". In dieser Methode wird die Datenbank-Verbindung zum Beispiel konfiguriert. Jetzt sieht es so aus, dass sowohl das Entity Framework Core, als auch ASP.NET Core sehr stark auf Dependency Injection setzen. Bedeutet, ich kann diese Zeile hier löschen und kann mir stattdessen einen Konstruktor anlegen. Und an diesen Konstruktor werde ich jetzt die Optionen übergeben. Und zwar sind diese vom Typ DbContextOptions, und zwar für den "FahrtenbuchContext". So heißt die Klasse, die mir angelegt worden ist. Die Variable nenne ich "Options", und rufe direkt den Basis-Konstruktor auf der Klasse DbContext, und reiche diese Optionen durch. Als nächstes muss ich ASP.NET beibringen, wie diese Optionen hier gefüllt werden, wenn ein neuer Kontext erzeugt wird. Und dazu wechsele ich in die Datei "Startup.cs", die mir automatisch von der Projekt-Forderung angelegt wurde. Und hier gibt es die Methode "ConfigureServices". Und hier werde ich jetzt auf der Service-Klasse die Methode "AddDbContext" aufrufen, und zwar DbContext vom Typ "FahrtenbuchContext". Hier fehlt mir jetzt noch ein Using Statement. Also, drücke ich Strg + Punkt und importiere dieses. Und als nächstes übergebe ich die Optionen. Das Ganze ist dann ein Lambda-Ausdruck. Ich sage also: "o" für Optionen geht nach o.UseSqlServer Und auch hier fehlt mir wieder ein Using auf Microsoft Entity Framework Core. Auch das füge ich über Strg + Punkt hinzu. Und an diese Methode muss ich nun meinen Connection String übergeben. Da mache ich es mir jetzt relativ leicht. Ich definiere mir hier oben eine Variable "Connection". Und der weise ich genau den String zu, den wir schon hier unten genutzt haben, beim Anlegen des DbContextes. In einer echten Anwendung würde ich natürlich hingehen und diesen String nicht fest verdrahten in meiner Anwendung, sondern aus einer Konfigurationsdatei auslesen. So, diese Connection, die übergebe ich jetzt an die Methode "UseSqlServer". Und nun kann ich mir einen Controller anlegen. Und in diesem Controller möchte ich jetzt die Liste der Fahrer ausgeben. Dazu gehe ich in den Ordner "Controllers" und sage hier: "Hinzufügen". Und wenn Sie schon ASP.NET MVC in der Version 5 gemacht haben, dann kennen Sie, dass das hier normalerweise ein Eintrag ist "Controller hinzufügen". Den gibt es aktuell noch nicht. Ich füge also eine neue Klasse hinzu. Und jetzt kann ich hier als Vorlage allerdings schon MVC Controller-Klasse auswählen. Und ich nenne diese Klasse "FahrerController", da ich die Liste der Fahrer ausgeben möchte. Und wie eben schon erklärt, setzt ASP.NET MVC ganz stark auf Dependency Injection. Bedeutet, meinen Kontext, den kann ich mir jetzt in meinen Controller von außen injizieren lassen. Dazu lege ich mir einen Konstruktor an und sage, dass ich an diesen Konstruktor einen "FahrtenbuchContext" übergebe. Und der befindet sich im Namespace "WebApplication1" - Models. Nenne ich "db" und hier initialisiere ich jetzt das Feld _db mit diesem übergebenen DbContext. Da es das Feld noch nicht gibt, kann ich auch das über Strg + Punkt generieren lassen. Und jetzt wurde das hier oben generiert und mit dem Read Only Schlüsselwort kann ich noch deutlich machen, dass sich dieses Feld nicht mehr ändern wird zur Lebenszeit. Die Vorlage hat uns hier jetzt bereits die Methode "Index" aufgerufen. Das ist also die Action, die ausgeführt wird, wenn ich direkt auf den Controller zugreife, ohne eine weitere Action anzugeben. Und hier wird bereits ein "View" zurückgegeben und als Modell an diesen "View" übergeben wir jetzt die Liste der Fahrer. Und an diesen "View" übergeben wir jetzt aus unserem DbContext die Liste der Fahrer. Da es diesen "View" noch nicht gibt, muss ich ihn im Ordner "Views" noch anlegen. Also, zunächst benötige ich hier einen Unterordner "Fahrer". Die Kommentation ist also in so einer ASP.NET MVC-Anwendung, dass sich die "Views" in einem Ordner befinden, der genauso heißt, wie mein Controller, nur ohne Suffix "Controller", und dass der Name des Views dann genauso ist, wie der Name meiner Action-Methode, in meinem Fall also "Index". Und hier kann ich jetzt eine MVC View Page wählen. "Index.cshtml" wird mir schon vorgeschlagen. Und diesen Teil hier oben kann ich direkt löschen. Außerdem muss ich jetzt meinen "View" noch typisieren. Ich sage also: ich bekomme ja ein Modell, und zwar ein "IEnumerable", also etwas, über das ich iterieren kann vom Typ WebApplication1.Models.Fahrer Und ab jetzt kann ich mit meinem HTML loslegen. Also, wir machen eine Überschrift: <h2Fahrer</h2, dann eine Tabelle von der Klasse "Table". Und innerhalb der Tabelle habe ich einen Überschriften-Bereich, also einen <thead-Bereich. Hier habe ich einen <tr. Und ich möchte hier ganz einfach nur die Spalten "Id", "Vorname" und "Nachname" ausgeben. Und das geschieht, indem ich hier einen <tbody-Bereich anlege. Und in diseem <tbody-Bereich möchte ich jetzt für jeden Fahrer, den ich finde, eine eigene Zeile anfügen. Dazu nutze ich eine foreach-Schleife und iteriere dabei über mein Modell. Und jetzt kann ich hier für jeden Fahrer eben eine neue Zeile anlegen. Und in dieser Zeile gebe ich die Id aus und Vornamen und Nachnamen. So, zu guter Letzt hätte ich noch gerne eine kleine Comfort-Funktion, nämlich einen Link auf diese Seite. Dazu öffne ich im Ordner "Shared" die Datei "_Layout.cshtml" und füge jetzt hier im Bereich der Navigation einen weiteren Link hinzu. Und dazu kopiere ich mir einfach den letzten, diesen Context-Link, gebe ihm den Text "Fahrer". Und das ist der Controller "Fahrer" und die Action "Index". Und jetzt sind wir soweit, dass wir das Ganze starten können. So, in meiner Web-Seite habe ich nun diesen Link "Fahrer". Und wenn ich diesen anwähle, dann sehen wir hier die Liste der Fahrer, aktuell ist es nur einer. Hätte ich mehrere Fahrer, würden die natürlich alle angezeigt werden. Wir können aber zusammenfassen. Um in einer ASP.NET Core-Anwendung das Entity Framework Core zu nutzen, sind folgende Schritte notwendig. Punkt Nummer 1 ist: Sie müssten über die Paket-Manager-Konsole die Pakete Microsoft Entity Framework Core und dann SQL Server für den SQL Server, oder halt eben für eine andere Datenbank, wenn Sie einen anderen Provider wählen, installieren. Dann müssen Sie die Tools installieren. Außerdem, wenn Sie so wie ich auf eine bestehende Datenbank zugreifen möchten und sich den Kontext generieren lassen wollen, dann müssen Sie die Design Tools noch installieren. Danach musste ich in der Datei "project.json" im Bereich "Tools" einen Eintrag für die Entity Framework Core Tools hinzufügen und konnte danach meinen Kontext erzeugen. Dazu habe ich Scaffold-DbContext aufgerufen, habe die Connection übergeben. Ich hätte jetzt hier auch als weiteren Parameter direkt schon den Provider mitangeben können. Dann wäre diese Nachfrage nicht mehr gekommen. Und über die Option "OutputDir" habe ich dann definiert, dass das Ganze im Ordner "Models" liegt. In meinem Kontext habe ich die Methode "OnConfiguring" gelöscht und stattdessen die Optionen über "Constructor Injection" von außen initiieren lassen. Das Vorbereiten auf das Initiieren geschah in der "Startup.cs". Und hier in der Methode "ConfigureServices", da habe ich also meinen Connection String konfiguriert, den ich normalerweise nicht hard kodieren würde. Und anschließend habe ich auf dem Services-Objekt die Methode "AddDbContext" aufgerufen und hier dann die SQL Server Verbindung konfiguriert. In meiner Controller-Klasse musste ich dann noch einen Konstruktor anlegen, der einen Kontext entgegennimmt und das Ganze in einem Feld speichert. Und dann konnte ich zu guter Letzt diesen Kontext in meinen Action-Methoden nutzen.

Entity Framework Core Grundkurs

Lernen Sie die Features von Microsofts O/R-Mapper kennen und wie Sie ihn in praktischen Anwendungen einsetzen.

2 Std. 29 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!