Manipulation base de données : Linq
Manipulation d’une base de données avec Linq
Pour manipuler une base de données, nous allons utiliser LINQ to SQL disponible depuis la version 3.5 du Framework .net.
LINQ to SQL, c'est quoi exactement? C'est une implémentation de O/R (Object relational mapping) permettant de modèliser une base de données relationnelle à l'aide de classe .NET.
Modéliser la base de données via Linq
Dans un premier temps, il faut modéliser la base de données dans votre projet. Pour cela, nous allons utiliser le designer LINQ to SQL présent dans Visual Studio.
Dans votre projet, ajouter un nouvel élément de type Classes LINQ to SQL.
Une fois l'élément ajouté, celui-ci va s'ouvrir automatiquement. Il faut ensuite faire la liaison avec la base de données. Pour cela cliquer sur "Explorateur de servers". Dans la fenêtre d'explorateur de servers, ajoutez la connexion à votre base de données. Enfin pour ajouter vos tables à votre DBML, il vous suffit de les faire glisser de l'explorateur de servers à votre DBML.
Dans notre DBML, nous avons deux tables, une avec les inscrits au jeu concours et l'autre avec les villes. Un inscrit est rattaché à un ville.
Exemple d'utilisation du DBML
Maintenant que nous avons un DBML, voyons comment interroger les données en base.
Effectuer une recherche avec Linq
En repartant de notre DBML JeuConcours, je souhaite récupérer uniquement les inscrits optin au jeu concours. Puis nous les afficherons à l'écran.
JeuConcoursDataContext jdc = new JeuConcoursDataContext(); var inscrits = from i in jdc.Inscrit where i.Optin == true select i; foreach (var inscrit in inscrits) { Response.Write(inscrit.Email); }
Il est possible de faire la même chose que l'exemple ci-dessus avec un code plus compact.
jdc.Inscrit.Where(i => i.Optin).ToList().ForEach(i => Response.Write(i.Email));
Modifier les données
Voyons maintenant comment modifier les données en base. Nous allons mettre en majuscule le nom des personnes.
JeuConcoursDataContext jdc = new JeuConcoursDataContext(); var inscrits = from i in jdc.Inscrit select i; foreach (var inscrit in inscrits) { inscrit.Nom = inscrit.Nom.ToUpper(); } jdc.SubmitChanges();
Insérer des données
Nous allons maintenant insérer un nouvel inscrit en base de données.
Inscrit nouvelInscrit = new Inscrit(); nouvelInscrit.Nom = "houzet"; nouvelInscrit.Prenom = "Sébastien"; nouvelInscrit.Email = "sebastien@demo.fr"; nouvelInscrit.Optin = false; nouvelInscrit.OptinPartenaire = true; nouvelInscrit.Ville_IdVille = 1; jdc.Inscrit.InsertOnSubmit(nouvelInscrit); jdc.SubmitChanges();
Supprimer des données
Il existe de manière d'effectuer une suppression. Si vous n'avez qu'un seul élément à supprimer nous allons utiliser la méthode DeleteOnSubmit() depuis votre objet table en précisant l'entity. Si vous souhaitez supprimer un ensemble d'élément, nous utiliserons la méthode DeleteAllOnSubmit() en précisant une liste IEnumerable d'entitie.
// Suppression de tous les inscrits avec optin à false var inscrits = from i in jdc.Inscrit where i.Optin == false select i; jdc.Inscrit.DeleteAllOnSubmit(inscrits); // Suppression de la personne avec l'id 1 Inscrit inscrit = jdc.Inscrit.Where(i => i.Id == 1).FirstOrDefault(); jdc.Inscrit.DeleteOnSubmit(inscrit); jdc.SubmitChanges();