Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SPA mit ASP.NET Core und Angular

Was ist das Entity Framework Core?

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Dieser Film bietet eine Einführung in die Funktionsweise von Entity Framework Core und zeigt die Unterschiede zum Entity Framework.
10:56

Transkript

Das Entity Framework ist Microsofts empfohlene Datenzugriffstechnologie für .NET Anwendungen. Beim Entity Framework Core handelte es sich um eine Neuentwicklung dieses Frameworks. Was bedeutet das? Schauen wir uns jetzt einmal an, was das Entity Framework an sich bietet. Von der Grundidee her sieht es wie folgt aus: Das Entity Framework ist ein objektrelationaler Mapper von Microsoft, ein sogenannter (O/R M). Bedeutet, das Entity Framework ermöglicht ein objektorientierten Zugriff auf die Datenbank. Ich muss also nicht mit SQL oder ähnlichem auf die Datenbank zugreifen. Darüber hinaus ist das Entity Framework Core, eine leichtgewichtige und erweiterbare Version des Entity Frameworks. Das Entity Framework war selbst ein wenig in die Jahre gekommen, ein wenig behäbig, einige Dinge konnten nicht mehr so gut umgesetzt werden. Und beim Entity Framework Core haben wir eine Neuentwicklung des Entity Frameworks. Im Prinzip können wir uns die Idee das Entity Frameworks wie folgt vorstellen: Wenn wir Daten in der Datenbank abbilden, zum Beispiel, Daten von einer Speisekarte, dann machen wir das in der Regel in Tabellen. Solche Tabellen, die haben Felder sowie hier Id, Name, Preis und KategorieId. Die haben vielleicht auch noch irgendwelche Einschränkungen, zum Beispiel, dass Id der Primary Key, das Kategorie ein Fremdschlüssel auf die Tabelle Kategorien ist. Und über solche Fremdschlüssel werden dann auch Beziehungen definiert zwischen zwei Tabellen. Wenn ich solche Daten aus der Datenbank abfrage, dann mache ich das normalerweise, wenn ich keine Entity Framework nutze oder keinen anderen O/R Mapper von Hand. Bedeutet, ich schreibe irgendwie Statements, die ungefähr so aussehen: Select ID, Name, Preis from Speisen, um drei Spalten aus der Tabelle Speisen abzurufen oder Select from Kategorien* für alle Kategorien, oder auch ein wenig komplexer. Wenn wir Kategorie und Speisen miteinander verbinden wollen, dann können wir, zum Beispiel, ein inner join nehmen. In der objektorientierten Programmierung sieht unsere Welt aber ein wenig anders aus. In der objektorientierten Programmierung, da haben wir keine Tabellen mehr, sondern da haben wir Klassen, zum Beispiel, eine Klasse Speise. Und diese Klasse Speise, die hat jetzt Eigenschaften, keine Felder mehr. Und schauen Sie mal, diese Eigenschaft Kategorie, das ist nicht mehr nur noch eine einfache Id, die wir hier haben, sowie das in der Datenbank der Fall war, sondern das ist eine Objektreferenz auf ein Objekt der Klasse Kategorie. Hier sehen wir darüber hinaus, dass wir im Gegensatz zu objektorientierten Programmierung, wo nur die N-Seite, sprich, die Speise da, wo wir viele von hatten, die Kategorie kannte, also die 1-Seite kennt in der objektorientierten Programmierung auch die Seite, wo wir eine 1 haben, die andere Seite. Darum hat die Kategorien hier eine Auflistung von Speisen. Wenn wir jetzt auf der einen Seite die Datenbank haben und in unserem Programm, aber mit der Klassen arbeiten, dann müssen wir diese Klassen, beziehungsweise Objekte dieser Klassen ja irgendwie mit Daten befühlen. Und das hat man früher in den Anfangszeiten, des .NET Frameworks manuell gemacht. Bedeutet, ich habe eine neue SqlConnection geöffnet, dann habe ich ein SqlCommand erzeugt, habe dieses Command mit einem SqlString, in dem Fall hier Select * from Speisen initialisiert, dann habe ich dieses Kommando ausgeführt, da bekam ich einen Reader zurück, über diesen Reader konnte iterieren und konnte dann immer neue Speisen erzeugen und die dann hinzufügen. Sie sehen hier schon, bei diesem Iterieren muss ich dann anhand der Positionsnummer den entsprechenden Eintrag der Spalte rausholen. Also reader.getInt (0), getString(1), ich muss die Datentypen kennen. Und das ist schon alles sehr fehleranfällig und natürlich auch zeitaufwendig. Deswegen wollen wir das heute eigentlich nicht mehr so machen, sondern greifen über einen O/R Mapper, wie das Entity Framework zu. Da sieht der gleiche Code dann wie folgt aus: Wir sagen einfach nur, wir brauchen einen neuen sogenannten DbContext. Und diesen DbContext, den nutzen wir dann, um da eine bestimmte Tabelle auslesen zu können. Wie funktioniert dieses Zusammenspiel zwischen Entitäten, Tabellen, Entity Framework. Das können wir uns am besten einmal in einer Abbildung ansehen. Sie haben also Ihre Anwendung und Sie haben irgendwo die Datenbank. In ihrer Anwendung haben Sie jetzt Objekte. Die möchten Sie ganze gerne in der Datenbank speichern. Und dazu nutzen Sie den Entity Framework Context. Der ist für Sie der Weg in die Datenbank. Über den können Sie aber nicht nur Daten speichern, Sie können auch LINQ benutzen, um Daten abzurufen. Der Entity Framework Context, der benutzt unter der Haube natürlich Funktionalitäten aus dem Entity Framework, greift also da drauf zu. Das Entity Framework, das hält wiederum Metadaten vor, um eine Verbindung zu Ihrer Datenbank herzustellen. Was bedeuten jetzt diese Bausteine im Einzelnen? Lassen sich uns zuerst über persistente Objekte sprechen. Das klingt erstmal ganz kompliziert, aber im Endeffekt sind persistente Objekte nicht anders als ganz normale .NET-Klassen, wie Sie sie sonst auch schreiben würden. Sie haben also keine speziellen Abhängigkeiten, Sie müssen keine Basisklassen implementieren oder ähnliches, sondern alles, was Sie machen, ist, Sie schreiben Klassen und fertig. Diese Klassen, die werden dann von Entity Framework Context verwaltet. Bedeutet, später, wenn ich Objekte habe aus diesen Klassen, dann kann ich die sogenannten DbSets hinzufügen und dann weiß mein Context, welche Objekte neu sind, welche gelöscht worden sind, welche sich geändert haben und kann daraus dann die verschiedenen SQL Statements erzeugen. Der Context, der stellt also für mich die Verbindung zwischen meinen Objekten und der Datenbank erst her. Und zwar, ermöglicht er mir Daten zu laden, aber auch Änderungen an Daten zu überwachen und dann schlussendlich diese Änderungen im Rahmen einer Geschäftstransaktion in der Datenbank zu speichern. Mein Entity Framework Context implementiert somit für mich das sogenannte Unit of Work- Muster. Zum Abfragen der Daten können wir beim Entity Framework LINQ benutzen. LINQ steht für Language Integrated Query, und zwar Language Integrated, weil das integriert ist in die C# Sprache. Es ist also ein essenzielles Feature von meiner Programmiersprache. Ich muss gar keine neue Sprache mehr lernen, sondern ich habe hier eine Abfragesprache auf Objektmengen, die es sowohl in C# als auch in VB.NET, zum Beispiel, nutzen kann. Was ich jetzt mit LINQ mache, ist, ich erzeuge eigentlich nur eine abstrakte Beschreibung meiner Abfrage. Und dann gibt es später einen Provider, zum Beispiel, den Entity Network Framework Core Provider, der aus so einer LINQ-Abfrage etwas ganz Konkretes, nämlich eine SQL-Abfrage für mein Zielsystem macht. Und dieser LINQ-Provider vom Entity Framework und Entity Framework Core, die sind einfach unterschiedlich implementiert, genauso wie der von anderen O/R Mappern, wie N-Hypernet auch anders implementiert ist. Wenn Sie in der Vergangenheit bereits mit dem Entity Framework 6 gearbeitet haben, dann stellen Sie sich vielleicht die Frage, was unterscheidet denn überhaupt 6 von Entity Framework Core. Na ja, zum einen müssen wir über die Code-Reife sprechen. Das Entity Framework 6 wird seit 2008 kontinuierlich weiterentwickelt. Natürlich war das 2008 noch nicht die Version 6, sondern damals noch die erste Version des Entity Frameworks, aber wir können hier einfach auf knapp zehn Jahre Entwicklungszeit zurückblicken. Und in zehn Jahren da kann man eine ganze Menge machen, zum einen an Features, zum anderen aber auch an Fehlerbehebungen und an Optimierungen. Das Entity Framework Core hingegen wurde vollständig neu entwickelt, und die erste Version die kam 2016 heraus. Und wir wissen alle, wie das bei ersten Versionen ist: Da fehlt immer so ein bisschen was. So auch beim Entity Framework Core. Zum Beispiel, fehlt der model- oder designbasierter Ansatz. Für den einen ist das schlimm, für den anderen wird das kein Problem sein, weil man den vielleicht sowieso nicht genutzt hat. Was auch fehlt, ist ein impliziertes Lazy Loading. Bedeutet also, beim Entity Framework 6, wenn ich eine Beziehung habe, zum Beispiel, eine Speise hat eine Kategorie und ich lade alle Speisen und greife dann für eine Speise auf die Kategorie zu, dann wird die automatisch nachgeladen. Das geht beim Entity Framework Core so nicht. Was auch nicht geht, sind direkte SQL-Abfragen gegen ungemappte Entitäten. Darüber hinaus fehlt auch die Unterstützung für Stored Procedures, das dürfte schon ein bisschen kritischer für viele sein, und Group By/ Aggregatfunktionen -- die werden nicht in der Datenbank ausgeführt beim Entity Framework Core, sondern wenn Sie eine Group By oder ein Sum oder ein Average oder ähnliches in Ihrer Link-Abfrage machen, dann führt das Entity Framework Core diese Abfrage im Speicher aus. Bedeutet, die Daten werden erst aus der Datenbank erstmal ausgeladen, und dann im Speicher wird die Aggregatfunktion erst ausgeführt. Und das kann natürlich schon zu gewissen Performance-Engpässen führen. Aber dass diese Features fehlen, bedeutet nicht, dass die nicht hereinkommen werden. Das Entity Framework Core ist noch jung, da wird auch eine ganze Weile dran noch entwickelt werden. Es gibt aber natürlich nicht nur Nachteile, sondern es gibt auch Vorteile. Zum Beispiel, haben wir endlich in Memory Dataprovider. Bedeutet also, ich kann jetzt endlich einfach Uni Tests gegen das Entity Framework fahren. Darüber hinaus haben wir die einfache Möglichkeit mehrere Statements in einem Rutsch an die Datenbank zu senden, was die Performance verbessert, und wir haben die Möglichkeit Kontexte und Entitäten über die Kommandozeile zu generieren. Vorher ging das nicht ganz so komfortabel. Da mussten wir das Ganze innerhalb von Visual Studio in einem PowerShell Kommando machen. Außerdem wird das Entity Framework Core auf Plattformen unterstützt, die es für das Entity Framework 6 so nicht im Zugriff gibt. Zum einen können wir das Entity Framework Core unter .NET Core nutzen. Heißt, wir können das Entity Framework Core unter Mac und unter Linux nutzen. Außerdem können wir das in einer universellen Windows-Plattform App in einer UWP-App benutzen und auch in einer Xamarin-App. Bedeutet also, Sie können das Entity Framework somit sowohl unter iOS, als auch unter Android benutzen, weil Android- und iOS-Apps ja mit Xamarin geschrieben werden können. Zusammenfassend können wir also sagen, das Entity Framework Core ist ein objektrelationaler Mapper von Microsoft. Es handelt sich dabei um eine komplette Neuimplementierung des alten Entity Frameworks. Dementsprechend gibt es einige Features, die es im alten Framework nicht gab, die durch die neue Architektur erst möglich geworden sind, zum Beispiel, die Unterstützung für UWP, Xamarin und .NET Core, aber es fehlen noch einige Features. Ob Sie jetzt das Entity Framework Core oder das Entity Framework 6 benutzen, das müssen Sie natürlich von Fall zu Fall abwägen. Wenn Sie eine .NET Core Anwendung schreiben oder eine UWP, oder eine Xamarin Anwendung, dann hat sich die Frage eigentlich erledigt, denn dort können Sie nur das Entity Framework Core benutzen.

SPA mit ASP.NET Core und Angular

Lernen Sie die Bestandteile von modernen Webanwendungen kennen und nutzen.

5 Std. 21 min (36 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Exklusiv für Abo-Kunden
Erscheinungsdatum:25.09.2017

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!