In diesem Post lernen wir alles über den EF core Database First Ansatz.

Der Code first folgt dann im nächsten Post.

Warum eigentlich zwei Ansätze?

Das Ziel der beiden Ansätze ist es, die Applikation und die Datenbank mit EF zu kontrollieren.

Warum gibt es dazu zwei Ansätze? Weil es zwei mögliche Ausgangsszenarien gibt, bevor die Datenbank von EF verwaltet wird.

  1. Eine Datenbank ist bereits vorhanden (Database first)
  2. Es ist keine Datenbank vorhanden (Code first)

Ziel des EF ist es natürlich unseren Code von Datenbankkonzepten soweit es geht fernzuhalten. Dies verbessert die Wartbarkeit und die Flexibilität des Codes.

Deshalb ist es am Ende nur ein Detail welchen Ansatz wir verwenden. Ist die Datenbank erst einmal unter Kontrolle von EF ist der zukünftige Workflow der gleiche.

Für die nachfolgenden Beispiele ist wieder das github repository mit dem Branch Code first bzw Database First zu Rate zu ziehen. 

Für die Beispielapplikation siehe auch die Einführung dazu.

Database First Ansatz

Beim Database First gehen wir wie folgt vor:

  1. Datenbank erstellen / restore aus sql skript
  2. dotnet CLI nutzen zum erstellen des DbContext und der POCOs

Die Befehle dafür sind relativ einfach und wir demonstrieren es an einer SQLite Datenbank (da diese leicher von Github zu klonen ist, weil File basiert). 

Die Applikation ist eine einfache Konsolenanwendung mit folgendem Aufbau: 

Applikationsaufbau

Im Data directory befindet sich unsere Sqlite Datenbank (leandb.db) und das Backup Skript. In das Models directory geben wir unsere POCOs und ins DataAccess directory wandert der DbContext.

Im Terminal kann man die vorhandenen Tabellen sehen (unter .tables)

Als erstes erstellen wir den DbContext mit dem dotnet ef CLI Tool. 
Im Beispiel wird Bash Syntax verwendet, Die Powershell Funktionen sind nicht groß anders

dotnet ef dbcontext "scaffold "DataSource=Data/leandb.db;foreign keys=true;" \
Microsoft.EntityFrameworkCore.Sqlite \
--context-dir DataAccess \
-c LeantrainingDbContext \
-o Models

Das analyisieren wir jetzt Zeile für Zeile:

  1. dotnet ef – das CLI Tool
    dbcontext scaffold – das Command zum Erstellen des dbContext
    “DataSource…” – ConnectionString zur vorhandenen Datenbank
  2. Microsoft…- Ausgewählter Provider
  3. –context-dir – Wo der DbContext abgelegt wird
  4. -c – Name des DbContext
  5. -o – Ordner in dem die POCOs abgelegt werden

Das Ergebnis sieht dann wie folgt aus:

für mehr infos check den Branch von Github aus

Warum Db first?

Nachfolgend Gründe für den Db First Ansatz:

  • Legacy Datenbanken zu ef core migrieren
  • Zum Start mit ef core (Einfacher wenn man SQL bereits kennt)
  • Testen von Backup Skripts
  • Schnelleres Setup als Code First
  • Austesten von Providern (Reaktion auf bestimmte Properties und Datentypen z.B.)

Im folgenden Post schauen wir uns den Code First Ansatz an.

Categories: ef-core-de

0 Comments

Leave a Reply