Schlagwort-Archive: SQL

SQLite 3 mit Visual Studio und Entity Framework

Einleitung

SQLite ist eine eingebettete Einzeldateidatenbank. SQLite eignet sich ideal für Desktopanwendungen
und Projekte. Die zum Beispiel einzige Client- bzw. Benutzer-seitige-Datenbank benötigen,
um Anwendungsdaten zu speichern.

Das Entity Framework 6 vereinfacht die Arbeit mit Datenbanken erheblich und konvertiert das Datenbankschema in Klassen, die Tabellen repräsentieren.

Es ist jedoch ein etwas kniffeliger Weg, um SQLite mit dem Entity Framework 6 (EF6)
zum laufe zu bekommen.

Grundlegendes – Installation der Vorraussetzungen

Als Grundlage für diesen Artikel arbeite ich mit einer SQLite3 Datenbank, welche ich zuvor mit
SQLite Studio v3.2.1 erstellt habe. Welches man sich hier kostenlos herunterladen kann:

https://sqlitestudio.pl/index.rvt?act=download

Für diesen Beitrag nutze ich Visual Studio 2017 Community Edition.

Nachdem wir eine Datenbank haben, brauchen wir noch eine entsprechende Runtime: System.Data.SQLite
Diese können wir hier herunterladen: https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Hier gibt es einige Versionen zu finden, unabhängig, ob ihr eine x86 oder x64
DotNet installiert habt, brauchen wir die x86 Version eurer installierten .NET Version.
In meinem Fall war es die sqlite-netFx46-setup-bundle-x86-2015-1.0.110.0 Datei, welche bei mir gut funktioniert.
( https://system.data.sqlite.org/downloads/1.0.110.0/sqlite-netFx46-setup-bundle-x86-2015-1.0.110.0.exe )

Bevor ihr die Installation startet müsst ihr Visual Studio einmal schließen.
Startet die Installation mit folgenden Installationsparametern:

SQLIte Installation
Installation

SQL Server Compact Toolbox installieren

Nun benötigen wir noch eine Visual Studio Erweiterung SQLite/SQL Server Compact Toolbox
Diese können wir hier heruntergeladen und anschließend mit einem Doppelklick installieren:
https://marketplace.visualstudio.com/items?itemName=ErikEJ.SQLServerCompactSQLiteToolbox

SQLite Server Compact Toolbox
SQLite Server Compact Toolbox
Visual Studio Erweiterung Installation

Ist auch die Erweiterung erfolgreich installiert, haben wir alle Voraussetzungen erfüllt,
sodass wir mit Visual Studio und dem Entity Framework 6 arbeiten können.

Entity Model erstellen

Nachdem wir nun soweit alles haben, können wir Visual Studio wieder starten und ein neues Projekt erstellen oder bestehendes verwenden. Ich habe hierzu ein neues Konsolenprojekt erstellt.
Damit wir mit dem Entity Framework arbeiten können,
müssen wir unserem Projekt ein Nuget-Package hinzufügen.

Installiert euch das Nuget-Package:
System-Data.SQLite
(ich habe die last-stable: 1.0.110 verwendet)

SQLite Nuget Package
SQLite Nuget Package

Weitere Informationen zu dem Nuget-Package kann man hier finden:
https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

In meinem Projektmappenexplorer erstelle ich ein neues Verzeichnis “Database”
und füge ein neues Element hinzu, wähle hierbei ein Element vom Typ ADO.NET Entity Data Model.
Einen Schritt weiter wählen wir EF Designer aus Datenbank, aus.

Wir wählen EF Designer aus Datenbank aus.


Mit dem Klick auf “Neue Verbindung” solltet ihr nun einen neuen Eintrag zur Auswahl haben:

SQLite EF Provider
SQLite Provider

Hier wählen wir SQLiteProvider aus. Im folgendem Dialog können wir nun unsere Datenbank auswählen. Hier tragen wir einfach den kompletten Pfad der Datei ein.

Unter Data Source geben wir den Pfad der Datenbank an
Unter Data Source geben wir den Pfad der Datenbank an

Wir können hier noch mit einem Klick auf “Verbindung Testen”. Ihr solltet hier,
solange ihr alles richtig gemacht habt eine positive Nachricht bekommen.

Im nächsten Schritt, könnt ihr dann die Tabellen auswählen, von denen das Schema übernommen werden soll.
(In meinem Fall übernehme ich alle)
Ist dies abgeschlossen, wird eine edmx Datei generiert, dass kann je nach Umfang der Datenbank ein bisschen dauern.

SQLite edmx Mpdell

Optionaler Workaround

Falls ihr nun im Code eine LINQ Abfrage und eine Exception wie hier erhaltet:

Exception bei einer Linq Abfrage mit SQLite


System.InvalidOperationException: “Für den ADO.NET-Anbieter mit dem invarianten Namen ‘System.Data.SQLLite’ wurde kein Entity Framework-Anbieter gefunden. Stellen Sie sicher, dass der Anbieter im Abschnitt ‘entityFramework’ der Anwendungskonfigurationsdatei registriert ist. Weitere Informationen finden Sie unter ‘http://go.microsoft.com/fwlink/?LinkId=260882’.

Gibt es einen kleinen Workaround. Dazu öffnen, wir die App.config.
Welche sich im Projektverzeichnis befindet und fügen zwischen Zeile 18 und 19 eine weitere
hinzu:

So das unser Providerselement so aussieht:

    <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>
SQLite3 Provider hinzufügen.
SQLite3 Provider hinzufügen.

Wir speichern das ganze nun ab und starten unsere Konsolenanwendung neu.

Beispiel wie wir Daten ausleesn könnten.
Beispiel wie wir Daten ausleesn könnten.

Wenn ich ein Breakpoint in die linq query setze, läuft die Anwendung so durch und
ich kann Daten auslesen, ohne eine Fehlermeldung.

Fazit

Mit SQLite kann ich modern und mit dem Entity Framework bequem
Daten auslesen, schreiben und bearbeiten.
Ist man eine Entwicklungsumgebung mit MSSQL und dem EF6 gewohnt,
ist erfreulich mit einem kostenlosen RDBMS zu arbeiten.
Halten sich die Datenmengen in einem übersichtlichen Rahmen,
dürfte das DB-System eine gute Wahl sein. Auch wenn der Start mit der Einrichtung
etwas tricky und fummelig ist.

Weiterführende Informationen

Möchten ihr in diesem Bereich euch noch tiefergehend informieren kann ich euch eine Lektüre empfehlen, welche mir schon in vielen Bereichen zu dem Thema geholfen hatm dass Buch Sqlite 3 – Einstieg in die Datenbankwelt , beinhaltet viele nützliche Informationen, die uns auch in der ganzen SQL Welt weiterhelfen, zu einem günstigen Preis