Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //il ne faut pas installer sqlite.net-pcl, SqliteNetExtensions suffit
- using SQLite;
- using SQLiteNetExtensions.Extensions;
- using SqliteExtension_universal_windows_.Models;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SqliteExtension_universal_windows_.DAL
- {
- //IDisposable est obligatoire pr utiliser les clauses "using"
- //utiliser using(var toto = new machin()) {} va faire en sorte que
- //la durée de vie de toto commence à "{" et finit à "}"
- //D'ailleurs la "}" va déclencher ds l'objet la méthode "Dispose"
- //Dans Dispose on peut ne rien mettre ou on peut déréférencer un objet interne
- //ou encore lancer une derniere operation(par ex: sauvegarde)
- public class RepoPersonne : IDisposable
- {
- //Le path part du répertoire d'installation de cette application (tj sle mm repertoire de base)
- //le repertoire d'installation de l'application est cree automatiquement apres download sur le store
- string path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "TestAvecRelation.db3");
- SQLiteConnection con;
- public RepoPersonne()
- {
- //Création de la DB si elle n'existe pas
- //rnevoie une connection active (sqlite n'est qu'un fichier texte organisé)
- con = new SQLiteConnection(path);
- Initialize();
- }
- public void Initialize()
- {
- //pr voir si la table existe, il va regarder s'il y a des colonnes
- //plutot que d'écrire le nom de la table en string (pr éviter les fautes ortho ou si la table change de nom par apres), on demande le nom du type de la class
- var info = con.GetTableInfo(typeof(Genre).Name);
- //si la table n'existe pas
- if(info.Count == 0)
- {
- //création de la table d'apres ses parametres
- con.CreateTable<Genre>();
- Genre g1 = new Genre { Civilite = "Mr" };
- Genre g2 = new Genre { Civilite = "Mme" };
- Genre g3 = new Genre { Civilite = "XXX" };
- //on met dans la DB
- con.InsertAll(new List<Genre> { g1, g2, g3 });
- }
- //si la table existe déjà, il ne fait rien
- con.CreateTable<Personne>();
- }
- public List<Personne> GetAllPersonnes()
- {
- //pr avoir les personnes avec les genres complétés
- // => charge les objets liés par lazyloading
- return con.GetAllWithChildren<Personne>();
- }
- public List<Genre> GetAllGenres()
- {
- //ne charge que la table et ne complete pas la liste de personnes
- return con.Table<Genre>().ToList();
- }
- public Personne Insert(Personne p)
- {
- #region --Methode avec les extensions --
- con.InsertWithChildren(p);
- #endregion
- ////j'insère d'abord la personne
- //con.Insert(p);
- ////je vais chercher le genre par la clef étrangère
- //p.Genre = con.Table<Genre>().FirstOrDefault(g => g.GenreId == p.GenreId);
- ////faire l'update complet
- //con.UpdateWithChildren(p);
- //retourner l'objet complet
- return p;
- }
- public int Update(Personne p)
- {
- //Je vais chercher la personne correspondante en DB
- //je peux mettre Personne temp a la place de var temp
- var temp = con.Table<Personne>().FirstOrDefault(pe => pe.PersonneId == p.PersonneId);
- if (temp != null)
- {
- temp.Nom = p.Nom;
- temp.Prenom = p.Prenom;
- temp.Genre = p.Genre;
- //On va updater en prenant en compte l'objet genre sans meme donner le genreId
- con.UpdateWithChildren(temp);
- return 1;
- }
- return 0;
- }
- public int Delete(int id)
- {
- return con.Delete<Personne>(id);
- }
- public void Dispose()
- {
- con = null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement