Rechnungsverwaltung auf SQLite umstellen

In der Artikelreihe zum Thema Rechnungsverwaltung haben wir ein Rechnungsverwaltungsprogramm mit SQL Server-Datenbank programmiert. SQL Server ist ein sehr zuverlässiges und gutes System für viele Anwendungen. Wenn wir aber eine kleine Rechnungsverwaltung nutzen wollen, die auch bei Freiberuflern oder Selbständigen ohne SQL Server auf dem Rechner laufen soll, benötigen wir eine Alternative. Hier kommt SQLite ins Spiel: eine sehr leichte Datenbanklösung, die noch nicht einmal eine Installation erfordert. Dieser Artikel zeigt, wir wir eine SQLite-Variante von unserer Rechnungsverwaltung erstellen.

Voraussetzung

Wir gehen an dieser Stelle von der Version der Lösung aus, die wir in den drei Beiträgen Rechnungsverwaltung, Teil 1: Grundlagen (www.datenbankentwickler.net/221), Rechnungsverwaltung, Teil 2: Rechnungspositionen (www.datenbankentwickler.net/222) und Rechnungsbericht mit XAML (www.datenbankentwickler.net/223) erstellt haben.

Ziel der Umstellung

Unsere bisherige Version der Rechnungsverwaltung verwendet den SQL Server als Datenbanksoftware. Diesen muss man zunächst installieren, bevor man eine Anwendung nutzen kann, die eine SQL Server-Datenbank zum Speichern ihrer Daten einsetzt. Für viele Anwendungsfälle ist das sinnvoll – vor allem, wenn ohnehin schon eine SQL Server-Installation vorhanden ist. Falls nicht, kann man auch eine der kostenlosen Varianten des SQL Servers installieren.

Wenn man jedoch eine Anwendung programmiert, die man beispielsweise zum Download für Benutzer mit einfachen Anforderungen anbieten möchte, ist der Aufwand zum Installieren der SQL Server-Software übertrieben hoch. Der Benutzer möchte die Anwendung herunterladen, in wenigen Sekunden bis Minuten installieren und diese dann in Betrieb nehmen.

Für diese Zwecke gibt es wesentlich leichtgewichtigere SQL-Datenbanken – zum Beispiel SQLite. Um eine SQLite-Datenbank zu nutzen, brauchen Sie nur ein paar Dateien im Verzeichnis Ihrer Anwendung zu installieren – und die eigentliche Datenbank kommt ebenfalls in Form einer handlichen Datei. Deshalb möchten wir dafür sorgen, dass Sie die Rechnungsverwaltung genauso mit SQLite nutzen können wie es uns zuvor mit dem SQL Server gelungen ist.

Umstellen auf SQLite

Die Umstellung nehmen wir nun Schritt für Schritt vor. Um Probleme bezüglich der Kompatibilität zwischen den einzelnen Komponenten zu vermeiden, entfernen wir zunächst alle per NuGet-Paketmanager hinzugefügten Pakete. Dazu öffnen wir den Paket-Manager über den Kontextmenü-Eintrag NuGet-Pakete verwalten… des Projekt-Elements im Projektmappen-Explorer.

Hier wechseln Sie, wenn dieser nicht bereits angezeigt wird, zum Bereich Installiert und entfernen den einzigen Eintrag EntityFramework. Dazu klicken Sie diesen Eintrag an und betätigen dann die Deinstallieren-Schaltfläche (siehe Bild 1).

Entfernen des aktuellen EntityFramework-Pakets

Bild 1: Entfernen des aktuellen EntityFramework-Pakets

Hinzufügen der benötigten Pakete

Nun wechseln Sie zum Bereich Durchsuchen und geben den folgenden Suchbegriff ein:

System.Data.SQLite.EF6.Migrations

Dieses Paket erscheint dann in der Ergebnisliste ganz oben. Markieren Sie diesen Eintrag und klicken Sie rechts auf die Schaltfläche Installieren (siehe Bild 2).

Hinzufügen des Pakets System.Data.SQLite.EF6.Migrations

Bild 2: Hinzufügen des Pakets System.Data.SQLite.EF6.Migrations

Der Vorgang dauert einige Sekunden, weil wir hier das unterste Element in der Hierarchie voneinander abhängiger Pakete ausgewählt haben. Wohlwissend, dass die benötigten Elemente, die sich in der Hierarchie über diesem Paket befinden, automatisch mit installiert werden. Zwischenzeitlich akzeptieren Sie die Lizenz für das Element Apache-2.0. Danach werden weitere Pakete installiert.

Es kann sein, dass nun einige Fehlermeldungen im Bereich Fehlerliste erscheinen. Wenn Sie die Anwendung nun einmal neu erstellen (Menüeintrag Erstellen|Projektmappe erstellen) sollten diese jedoch verschwinden. Wechseln Sie nun unter NuGet zum Bereich Installiert und leeren Sie das Suchfeld, finden Sie die Einträge aus Bild 3 vor.

Automatisch mit installierte abhängige Pakete

Bild 3: Automatisch mit installierte abhängige Pakete

NuGet hat also alle abhängigen Pakete, die für den Einsatz des Pakets System.Data.SQLite.EF6.Migrations nötig sind, automatisch hinzugefügt.

Aber warum haben wir überhaupt dieses Paket ausgewählt Weil bei unseren Experimenten genau dieses Paket fehlt, um den entscheiden Baustein zum Projekt hinzuzufügen – mehr dazu weiter unten.

Änderungen in der Konfigurationsdatei

Wenn Sie sich nun die Datei App.config ansehen, die Anwendungseinstellungen im XML-Format bereithält, finden Sie dort zwar noch einige Elemente der unter SQL Server lauffähigen Version der Rechnungsverwaltung, aber durch die Installation der NuGet-Pakete wurden auch einige neue Elemente hinzugefügt.

Allerdings befindet sich dort noch die alte Verbindungzeichenfolge:

<connectionStrings>
   <add name="RechnungsverwaltungContext" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=Rechnungsverwaltung1.RechnungsverwaltungContext;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>

Diese ersetzen wir als Erstes durch die neu zu verwendende Verbindungszeichenfolge. Wichtig ist hier, dass Sie den Namen der Context-Klasse für das Attribut Name angeben. Für das Attribut connectionString brauchen Sie nur den Pfad zu der zu erstellenden Datei anzugeben – wir verwenden hier Rechnungsverwaltung.sqlite:

<connectionStrings>
   <add name="RechnungsverwaltungContext" connectionString="Data Source=.\Rechnungsverwaltung.sqlite"       providerName="System.Data.SQLite" />
</connectionStrings>

Den Bereich configuration|entityFramework erweitern wir dann noch wie folgt um einen Eintrag für System.Data.SQLite:

<entityFramework>
   <providers>
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, 
         EntityFramework.SqlServer" />
     <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices,         System.Data.SQLite.EF6" />
     <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices,         System.Data.SQLite.EF6" />
   </providers>
</entityFramework>

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Visual Basic Entwickler:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar