LINQ to SQL
La création de classes LINQ to SQL
LINQ to SQL est un moyen de disposer de classes fortement typées pour l’accès aux données stockées par SQL Server. LINQ utilise les relations entre les tables de la base de données pour charger les données dans des objets prêts à être utilisés par le code. LINQ to SQL n’est pas seulement utile pour l’extraction de données, il permet également de réaliser des insertions, mises à jour et suppressions de données.
Visual Studio facilite la création de classes LINQ to SQL en fournissant un concepteur d’objets relationnels permettant de créer visuellement des objets et de définir leurs relations. Pour bénéficier des modèles utilisés dans ce chapitre, vous devez installer Outils LINQ to SQL depuis l’installeur de Visual Studio, sous l’onglet Composants individuels dans la section Outils de code.
Créez un nouveau dossier nommé LinqToSql dans le projet Database et ajoutez un nouvel élément Classes LINQ to SQL nommé SelfMailer.dbml.
Visual Studio ajoute le fichier au projet et l’ouvre dans le concepteur d’objets relationnels. La référence à la librairie System.Data.Linq est également ajoutée.
Ouvrez l’Explorateur de serveurs et faites glisser les trois tables...
L’objet DataContext
La classe SelfMailerDataContext se charge des connexions avec la base de données pour l’exécution des requêtes. Elle dérive de la classe DataContext. Avant de pouvoir exécuter des requêtes sur une base de données, un nouvel objet DataContext du type désiré doit être instancié. Cette instanciation peut se faire sans paramètre. La chaîne de connexion utilisée sera celle spécifiée dans les propriétés de la classe LINQ to SQL :
L’instanciation de l’objet DataContext se fait de préférence au sein d’une clause using de manière à ce que les ressources de l’objet soient libérées :
// Utilisation de la clause using
using (SelfMailerDataContext context = new
SelfMailerDataContext())
{
...
}
// Sans clause using, l'objet doit être explicitement libéré
SelfMailerDataContext context = new SelfMailerDataContext();
...
context.Dispose();
1. La méthode ExecuteQuery
La manière la plus rapide pour exécuter une requête est d’utiliser la méthode ExecuteQuery<T> de l’objet DataContext. Pour récupérer tous les enregistrements d’une table, l’instruction sera la suivante :
IEnumerable<MailServers>...
Exécuter des requêtes avec LINQ
Les requêtes LINQ permettent d’avoir une syntaxe typée qui sera évaluée lors de la compilation de l’application, contrairement aux requêtes sous forme de chaînes de caractères effectuées avec la méthode ExecuteQuery<T> de l’objet DataContext qui ne lèveront une erreur que lors de l’exécution et de la transmission de la requête à la base de données.
Les requêtes LINQ to SQL suivent les mêmes principes de la syntaxe LINQ générale.
1. Les requêtes simples
Les requêtes simples s’effectuent avec une clause from et une clause select :
var query = from ms in context.MailServers
select ms;
Dans cet exemple, l’objet query est affecté avec la collection d’enregistrements de la table MailServers.
2. Les requêtes filtrées
La clause where permet de filtrer les données qui seront retournées :
var query = from ms in context.MailServers
where ms.Password_AllowSave == true
select ms;
Dans cet exemple, l’objet query est affecté avec la collection d’enregistrements...
Les procédures stockées
Ajoutez la procédure stockée suivante à la base de données :
CREATE PROCEDURE dbo.GetLinkedMailServersSenders
(@MailServerID int = 0)
AS
SELECT ms.*, s.*
FROM MailServers AS ms
INNER JOIN MailServerSender AS mss
ON ms.ID = mss.MailServer_ID
INNER JOIN Senders AS s
ON mss.Sender_ID = s.ID
WHERE ms.ID = @MailServerID
Cette procédure permet de récupérer les enregistrements des tables MailServers et Senders qui sont liées en fonction de l’identifiant d’un enregistrement.
1. L’ajout de procédures stockées au modèle
Pour ajouter une procédure stockée au modèle de données, il suffit de la sélectionner puis de la faire glisser depuis l’Explorateur de serveurs vers le concepteur d’objets relationnels :
Visual Studio ajoute une méthode du nom de la procédure stockée à l’objet dérivant de DataContext. Les paramètres de la méthode sont également déclarés en fonction des paramètres...