Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. C# 10
  3. LINQ to SQL
Extrait - C# 10 Développez des applications Windows avec Visual Studio 2022
Extraits du livre
C# 10 Développez des applications Windows avec Visual Studio 2022
5 avis
Revenir à la page d'achat du livre

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.

La création de classes LINQ to SQL

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’objet DataContext

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 :

images/21SO004.png

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...