SQLite Code First mit EF Core

Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

SQLite Code First mit EF Core

Wir haben bereits einige Male SQLite als Datenbanksystem verwendet. Allerdings hatten wir damals jeweils eine Datenbank mit SQLite erstellt und dann ein Entity Data Model dafür erstellt. In den letzten Ausgaben haben wir uns jedoch in Zusammenhang mit SQL Server-Datenbanken mit Code First-Migrationen befasst, also den Aufbau der Datenbank durch Klassen beschrieben und dann erst die Datenbank erstellen lassen. Das wollen wir nun auch mit SQLite machen, was erstmals durch Entity Framework Core möglich ist. Allerdings sind dazu ein paar Schritte mehr nötig, als es mit dem SQL Server der Fall ist.

Die .NET Core-Vorlagen sind noch überschaubar. Derzeit gibt es für den Desktop noch gar keine Vorlage, sondern nur für Konsolen, Klassenbibliotheken und etwa für ASP.NET-Anwendungen (aktueller Stand: .NET Core 2.1).

Letztere haben wir ja schon programmiert, nun machen wir uns mit den anderen beiden Typen vertraut. Zum Testen verwenden wir zunächst die Vorlage Konsolen-App (.NET Core) – siehe Bild 1. In einem späteren Artikel werden wir uns dann ansehen, wie wir eine Klassenbibliothek erstellen, welche das Entity Data Model enthält und auf das wir dann von einer WPF-Anwendung zugreifen können.

Anlegen eines Projekts auf Basis von .NET Core

Bild 1: Anlegen eines Projekts auf Basis von .NET Core

Nachdem wir die Konsolen-App erstellt haben, finden wir die dort übliche Klassenbibliothek Program.cs vor. Und Sie sehen es richtig: Für diese Funktion, also den Zugriff per Entity Framework auf eine SQLite-Datenbank, können wir aktuell nicht nur nicht mit WPF arbeiten, sondern die Konsolen-App bietet auch noch keine Unterstützung der Programmiersprache Visual Basic.

Zum Glück haben wir uns in den ersten Ausgaben von DATENBANKENTWICKLER auch mit C# beschäftigt, sodass wir einige wenige Codezeilen leicht damit programmieren können.

Um die Unterstützung für das Entity Framework hinzuzufügen, klicken Sie mit der rechten Maustaste auf das Projekt-Element im Projektmappen-Explorer und wählen aus dem dann erscheinenden Kontextmenü den Eintrag NuGet-Pakete verwalten aus.

Hier wechseln Sie dann zum Bereich Durchsuchen und geben als Suchbegriff EntityFrameworkCore.Sqlite ein.

Wählen Sie hier die stabilste aktuelle Version aus und klicken Sie auf Installieren (siehe Bild 2). Danach werden Sie noch aufgefordert, der Lizenz zuzustimmen.

Hinzufügen der NuGet-Pakete

Bild 2: Hinzufügen der NuGet-Pakete

Den gleichen Vorgang wiederholen Sie anschließend für das Paket Microsoft.EntityFrameworkCore.Design. Schließlich fügen wir noch das Package Microsoft.EntityFrameworkCore.Tools hinzu.

Modell erstellen

Nun benötigen wir das Entity Data Model. Dazu legen Sie eine neue Klasse namens BestellverwaltungContext.cs an. Dieser fügen wir zunächst einige Verweise auf Namespaces hinzu:

using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;

Der Code der Klasse selbst sieht wie folgt aus. Die Klasse implementiert die Schnittstelle DbContext.

Als Erstes fügen wir eine Methode namens OnModelCreating hinzu, welche die eindeutigen Indizes für die betroffenen Felder hinzufügt:

namespace CoreSQListe {
     class BestellverwaltungContext : DbContext {
         //eindeutigen Index für EntityFrameworkCore:
         protected override void OnModelCreating(ModelBuilder builder) {
             builder.Entity<Anrede>()
                 .HasIndex(a => a.Name)
                 .IsUnique(true);
             builder.Entity<Bestellposition>()
                 .HasIndex(b => new { b.BestellungID, b.ProduktID })
                 .IsUnique(true);
         }

Die nächste Methode heißt OnConfiguring und legt den Namen der zu erstellenden beziehungsweise zu verwendenden SQLite-Datenbank fest. Das erledigen wir mit der Methode UseSqlite des mit dem Parameter optionsBuilder übergebenen Elements. Der Parameter dieser Methode heißt Data Source und soll in diesem Fall den Wert Bestellverwaltung.db annehmen:

         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
             optionsBuilder.UseSqlite("Data Source=Bestellverwaltung.db");
         }

Nun folgenden die Deklarationen der DbSet-Elemente für die einzelnen Auflistungen beziehungsweise Tabellen:

         public DbSet<Anrede> Anreden { get; set; }

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]