Implémenter SQLite Et Entity Framework Dans Un Projet C#

L’objectif est d’expliquer la procédure pas à pas pour mettre en place le couple SQLite / Entity Framework sous Visual Studio.

A priori plutôt simple l’ajout d’un gestionnaire de connexion à une base de donnée SQLite s’avère étrangement “particulière”.

Pour synthétiser, une base de données SQLite n’entre pas dans le schéma client/serveur que l’on rencontre habituellement dans les autre SGBDR. SQLite se résume à un fichier contenant les données, puis un connecteur embarqué dans l’application qui possède ainsi d’une base de données locale et légère. Derrière sa simplicité SQLite respecte la norme ACID et embarques des fonctionnalités identiques à ses concurrents (contrain de clef étrangère, index, vue etc.).

L’objectif est donc de pouvoir réaliser ceci sous Visual Studio lorsqu’on ajoute un “ADO.NET Entity Data Model :

SQLiteEF_Objectif

 

 

Connecteur SQLite

Dans un premier temps, télécharger le connecteur SQLite depuis le site de l’éditeur : http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

02 - Telechargement SQLite for VisualStudio

Assurez vous de prendre la version la plus récente (pour le .Net Framework 4.5.1) en version 32 bits ! En effet seule la version 32 bits ajoutera les composants graphiques à Visual Studio pour créer une connexion (Visual Studio étant lui aussi en 32 bits)

Ensuite installer le connecteur (Full Installation) en prenant soin de cocher la case “Install the designer …” :

02c - Choose Designer

Contrôler dans l’ajout / suppression de programme que l’installation s’est bien déroulée (N° de version identique) :

02d - Verify Install

Création d’une base de données

Pour manager une base de données SQLite il existe plusieurs logiciel (Navicat, SQLite Manager pour Firefox …) je vais utiliser une application gratuite et portable nommée “DB Browser for SQLite” téléchargeable ici : http://sqlitebrowser.org/

Lancer le DB Browser for SQLite et créer une nouvelle base de données (c:\data\database.sqlite dans mon exemple) :

03 - Create Database

 

Créer les tables nécessaires (je prends pour exemple une base de discothèque avec des artistes et des albums) à l’aide du script suivant :


04 - Create Table

La contrainte de clef étrangère aura son importance tout à l’heure

Puis ajouter des données à ces tables :

05 - Data Artistes

06 - Data Album

Visual Studio

Maintenant que nous sommes prêt, il faut créer un projet C# et s’assurer que celui ci est bien en Framework 4.5.1 :

01 - Creation Projet

01b - Project 4.5.1

Dans l’explorateur de serveur (bandeau de gauche), créer une connexion vers la base SQLite :

07 - Create Sqlite Connexion

08 - Connexion Sqlite

Puis maintenant, installer Entity Framework grace à NuGet (clic droit sur le projet / Gérer les packages NuGet)

09 - Nugget

 

Se positionner sur “En ligne” (car on va installer un package qui vient d’internet) puis dans la zone de recherche saisir “sqlite” afin de filtrer l’ensemble des packages. Installer le package “System.Data.SQLite.EF6(x86/x64). Il s’agit du package Entity Frameworken version 6.1.2.0 (alors qu’a cette heure la dernière version de Entity Framework est en 6.1.3) pour SQLite :

10 - EF for SQLite

Accepter la licence Entity Framework

Après l’installation étape importante : “Régénérer la solution

12 - RegenerateSolution

Dans le projet créer un nouveau dossier nommé par exemple “Entity”, il sera utilisable en tant qu’espace de nom et contiendra le Data Model Entity Framework de la base SQLite créée

12b - Nouveau Dossier

12c - Folder Name Entity

Ensuite clic droit sur ce dossier “Entity” et ajouter un élément de type “ADO.NET Entity Data Model”

13 - Add Element

14 - DataModel Entity

L’assistant de création de Data Model se lance, choisir le “Database First”. Ceci va créer les classes C# en regard de la conception de la base de données. A l’inverse le “Code First” aurait créé les tables dans la base de données à partir des classe C# créées par le développeur :

15 - Database First

Par défaut l’assistant pointe sur la connexion SQLite crée par avance depuis l’explorateur de serveur. Sinon il faudra la sélectionner dans la liste déroulante. Penser à donner un nom explicite en bas (pour le connectionString contenu dans App.Config)

16 - Choose Connexion

Sélectionner le modèle à importer, en sélectionnant les tables l’assistant va créer le modèle et les classes C# de ces tables

17 - Choose Data

A partir de maintenant le diagramme est correctement créé. La contrainte de clef primaire est visible par la relation qui est dessinées sur le diagramme :

17 - Model Designer

Tester

Maintenant que le Data Model est correctement initialisé, il ne reste plus qu’ tester avec un peu de code et du LinQ :


19 - Code LinQ

L’idée n’est pas de coder tout ce qui est réalisable dans le CRUD mais juste de s’assurer que la communication via Entity Framework avec la base SQLite est bien établie.

Il ne reste plus qu’a lancer le projet :

19 - Error SQL Factory

Une belle erreur apparaît. Le compilateur indique qu’il n’est pas en mesure de trouver le provider SQLite ! En clair il lui manque l’assembly pour manipuler la base de données via du code C#.

Il faut alors ouvrir le fichier App.Config et ajouter les lignes suivants dans la section “<DBProviderFactories>”


20 - APP Config

On relance l’application, et cette fois ci ça marche :

21 - Application OK

 

 

 

A propos de l'auteur :  Fabien Lierville

Chef de projet en Ingénierie Informatique Industrielle avec une expérience significative de 17 années. Gestion de projet à dominante pharmaceutique avec le respect de méthode qualité (GAMP V5).
Véritable passionné d’informatique depuis l’Amstrad cpc 6128 ;)

Laisser un commentaire