Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
Für die nachfolgenden Beispiele ist wieder das Github repository mit dem Branch Code first zu Rate zu ziehen.
Für die Beispielapplikation siehe auch die Einführung dazu.
Wie verwenden wir Code First
Um Code first anzuwenden nutzen wir immer die folgende Vorgehensweise:
Umsetzen anhand der Beispielapplikation
Als erstes legen wir die Models an, wie in dem Post über die Beispielapplikation angezeigt ist.
Wir fügen aber noch zusätzlich eine Klasse mit dem Namen Entity hinzu, von der alle anderen POCOs ableiten.
Diese sieht wie folgt aus:
public class Entity
{
public int Id { get; set; }
}
cd DataAccess;
touch LeantrainingDbContext.cs;
code LeantrainingDbContext.cs;
# ich nutze vs code auf einem Mac daher diese Abfolge
Diese Klasse leitet dann von DbContext aus dem Namespace Microsoft.EntityFrameworkCore ab. Siehe dazu auch den dedizierten Post:
In diesem DbContext können wir dann zwei Methoden überschreiben:
- OnConfiguring
- OnModelCreating
OnConfiguring
In der OnConfiguring Methode beschreiben wir den Datenbank provider den wir nutzen wollen, sowie den Connection string und weitere Optionen, z.B. logging usw.
In unserem Beispiel mit Sqlite rufen wir einfach die UseSqlite Extension Method auf und geben den ConnectionString hinein.
Für das Product Entity sehen wir in der OnModelCreating Methode folgendes:
- Setup Aufruf (s.u.)
- Mit der Property Methode wählen wir über die lambda Syntax die Property des Objektes aus die wir definieren wollen.
- Angeschlossene Methoden definieren:
a) Datentyp
b) DefaultWerte (Objekt oder SQL möglich)
c) Constraints (z.B. MaxLength, isNotNull == IsRequired()) - hier nutzen wir HasDefaultValueSQL und die Sqlite Datumsmethode datetime(‘now’)
- Angeschlossene Methoden definieren:
- Die HasOne Methode zeigt auf einer NavigationProperty eine Beziehung zu einer anderen Entität
- WithMany erzeugt eine 1-zu-n Beziehung
- WithOne erzeugt eine 1-zu-1 Beziehung
- Angeschlossen werden kann dies mit HasForeignKey
Wir haben hier die FLUENT API verwendet. In der Übersicht kannst du dich über einen Vergleich der Fluent API. Konventionen und der Attribut Verwendung informieren.
Wir sehen hier in der Setup Methode
- Erstellen des Typebuilders (mb.Entity
()); - Explizites setzen des Primary keys
- An den Namen des Entities hängen wir für die Tabelle ein “s” an, um der Tabelle einen Plural zu verleihen
- Return des generischen EntityTypeBuilders
.
Migration erstellen
Haben wir dies nun für alle Entities übernommen, müssen wir EF nun noch zeigen, wie die POCOs und der DbContext zusammen in eine Datenbank zu übersetzen sind.
Das übernimmt eine sogenannte Migration für uns. Migrationen stellen kurzgesagt eine Übersetzung bzw. das Bindeglied von POCOS + DbContext zur Datenbank dar.
Diese erstellen wir wie folgt:
dotnet ef migrations add InitialMigration -o ./Data/Migrations/
- dotnet ef – dotent ef CLI Tool
- migrations add – Command für neue Migration
- InitialMigration – Name der Migration
- -o ./Data/Migrations/ – Ordner für die Migrationsdateien
dotnet ef database update
Damit ist unsere Applikation fertig erstellt für den Einsatz von Entity Framework Core!
Nun können wir die Query API nutzen um Daten hinzuzufügen, zu entfernen oder abzufragen.
Schaue auf jeden Fall in die Übersicht für weitere Themen und lade dir das Repository herunter um diese Beispiele nachzuvollziehen.
Wenn du eher ein geführtes Lernen bevorzugst, dann schaue dir unbedingt den Udemy Kurs an.
Warum Code First einsetzen?
Nachfolgend Gründe, um Code First einzusetzen
- Greenfield Projekte (neue Entwicklung)
- Um EF Core komplett zu verstehen und zu lernen
- Datenbank unabhängig zu agieren (Provider unabhängig)
- Mehr Kontrolle beim Initialen Erstellen (Benennung Tabellen und Entities, Datentypen usw.)
0 Comments