Was wir in diesem Post lernen

  • Was ist Entity Framework Core
  • Warum nutzen wir Entity Framework Core
  • Konzepte von Entity Framework Core

Was wir in diesem Post nicht ansehen

  • Details der Konzepte
  • Implementierungen
  • Vor- und Nachteile

Was ist Entity Framework Core

Entity Framework ist eine .Net Technologie, die den Datenzugriff für objektorientierten Programmcode abstrahiert. 

Es überbrückt den Unterschied unser Datenbanken (zumeist Relationale Datenbanken oder SQL Datenbanken) zu Objektorientiertem Code.

Dabei stellt es nicht nur eine Zugriffstechnologie dar, sondern auch eine Technologie zum Verwalten des gesamten Datenbank managements, inklusive der folgenden Punkte:

  • Datenbanksession
  • Transaktionen
  • Schemaverwaltung
  • Datentypen und Beziehungen definieren

Warum benötigen wir EF Core?

Dadurch, dass EF uns die Arbeit mit der Datenbank abnimmt, können wir uns vollständig auf die Businesslogik unser Applikation konzentrieren. 

EF ist am Ende eine Abstraktion auf der ADO.Net Technologie von .Net.

Als ORM (objekt-relational-mapper) überbrückt es einen entscheidenden Unterschied zwischen relationalen Datenbanken und objektiorientieren Code.
 

Objekt- Impedanz-Mismatch

Eine Zeile einer SQL Datenbank Tabelle entspricht einem Objekt, während eine Spalte  der Tabelle etwa einer Property entspricht. Soweit so gut.

Der sogenannte Objekt-Impedanz-Mismatch bezeichnet aber die unterschiedliche Verwaltung von Abhängigkeiten in beiden Systemen.

Dies lässt sich am besten anhand eines Beispiels darstellen.

Dazu verwenden wir ein E-commerce Beispiel, bei dem Es sowohl Customer als auch Order Entitäten gibt. (Klassen im Code, Tabellen in SQL)

In objektorientiertem Code hat der Customer eine Referenz, also eine einfache Property, auf das Order Objekt. 

Die gleiche Abhängigkeit in einer SQL Datenbank mit den zwei Tabellen Customer und Order stellt sich genau entgegengesetzt dar.

Die Order Tabelle zeigt mittels eines Fremdschlüssel Constraints auf den Primärschlüssel der Customer Tabelle.

Diesen Unterschied überbrückt das Entity Framework für uns.
Das ist der erste und ursprüngliche Grund für das Entity Framework, insgesamt erledigt es aber noch viele Aufgaben mehr für uns. (S.o.)

Nun schauen wir uns an, wie das mit den EF Konzepten zusammenspielt.

Konzepte in Entity Framework Core

Im Entity Framework gibt es die folgenden Konzepte, um diese Voraussetzungen zu erfüllen. Die Konzepte die diese Technologie ausmachen sozusagen,

  • Db first und Code first 
  • DbContext
  • POCOs
  • Migrationen
  • Query API
  • ChangeTracking

All diese werden in meinem Online Kurs zu dem Thema Ef core erläutert. In dem Kurs gehen wir die Themen anhand einer Beispielapplikation durch, die zum Download verfügbar steht.
Zusätzlich gibt es im Anschluss an jedes Kapitel eine Übung, um dies Wissen zu festigen.

Db first und Code first

Mit Entity Framework (EF) gibt es zwei mögliche Wege die Datenbank unter die Kontrolle von EF zu bringen.

  • DbFirst – Eine vorhandene Datenbank mit EF integrieren (Code aus der Datenbank erzeugen)
  • CodeFirst – Eine neue Datenbank aus dem Code erzeugen

Beide Ansätze kannst du hier jeweils nachvollziehen:

–> DbFirst

–> CodeFirst

DbContext

Der DbContext dient drei Zwecken:

  • Eine Instanz  des Kontextes stellt eine Session mit der Datenbank dar
  • Die Definition der Datenbankbeziehungen im Bezug auf die definierten Entitäten
  • Zugang zu allen API Methoden des Entity Frameworks (Query, Commands, Migrationen, usw.)

Der DbContext kann seine Funktionen allerdings nur ausführen, indem er auf definierte Entitäten zurückgreift. Das sind in diesem Fall einfache Klassendefinitionen die ausschließlich Properties enthalten.

Diese Klassen nennt man dann POCO – Plain Old Csharp Object. 

POCOs

Üblicherweise entspricht eine Klasse einer Tabelle und die Abhängigkeiten werden durch einfache Properties auf andere POCOs dargestellt. (sogenannte NavigationProperties)

Um im Beispiel des Customers zu bleiben würde dies etwa so aussehen:

public class Customer
{
  public int Id { get; set; }
public string Name { get; set; }
public Order Order { get; set; } // NavigationProperty
}

Um nun die Pocos mit hilfe des DbContextes in die Datenbank zu übersetzen benötigen wir ein Bindeglied, sozusagen den Kleber. Und dies sind für EF die Migrationen.

Migrationen

Eine Migration besteht aus mehreren Dateien und beschreibt wie die POCS und Beziehungen, definiert im DbContext, in die Datenbank übersetzt werden. Diese sind dementsprechend auch providerspezifisch!

Um eine MIgration zu erstellen nutzen wir das ef CLI Tool von dotnet core.

Schaue auch die tiefergehenden Posts zu Migrationen:

Ist die Datenbank mit der ersten Migration erstellt, können wir alle zukünftigen Änderungen ebenfalls über das Vorgehen der Migrationen abbilden. Das heißt der Workflow zur Veränderung ist immer der folgende:

  • POCO erstellen / verändern
  • DbContext entsprechend anpassen
  • Migration erstellen
  • Migration auf die Datenbank anwenden

Um nun Daten von der Datenbank abzufragen bzw einzufügen, ist das nächste Konzept von größter Bedeutung: 

Die Query API

Die Query API hat ihren Zweck darin, dass wir Datenbank operationen auf EF abstrahieren und verwenden können.

Dies schließt die üblichen CRUD Operationen (Create, Read, Update, Delete) ein, ist aber ergänzt um weitere Aktionen. Siehe dazu auch den Post über CRUD mit EF Core.

Grundsätzlich rufen wir alle Methoden der Query API auf einer Instanz des DbContext auf und greifen über DbSet<T> auf die jeweiligen Datenbanktabellen zu.

Verwenden wir nicht lesende Operationen kommt das letzte Feature von EF ins Spiel, das sogenannte ChangeTracking.

ChangeTracking

Das ChangeTracking beobachtet jegliche Änderungen an den Entitäten (POCOS) und speichert dessen Zustand

Rufen wir dann mittels der Query API Methoden zum Hinzufügen, Updaten oder Entfernen auf, ändert das Changetracking diesen Zustand und beim Ausführen wird anhand des Zustands ein SQL Statement abgesetzt.

Siehe dazu auch den Artikel über das ChangeTracking.

Zusammenfassung

In diesem Post haben wir ganz grob gesehen was Entity Framework ausmacht, wo es herkommt und warum wir es benutzen wollen.

Wir haben dazu das Konzept des ORMs angesehen, um zu verstehen welches Problem Entity Framework eigentlich löst.

Zum Ende haben wir uns dann die grundlegenden Konzepte von Entity Framework angesehen. Namentlich DbContext, POCOs, Migrationen, ChangeTracking und die Query API.

Eine der wichtigsten Erkenntnisse ist jedoch, dass EF die Datenbankprogrammierung auf Objektorientierte Programmierung ummünzt, so dass wir eine konsistente Entwicklung haben.

Categories: ef-core-de

0 Comments

Leave a Reply