Procédure pas à pas : Requête et modèle objet simples (C#)

Cette procédure pas à pas fournit un scénario LINQ to SQL complet essentiel de complexité minimale. Vous allez créer une classe d'entité qui modélise la table Customers dans l'exemple de base de données Northwind. Vous créerez ensuite une requête simple pour répertorier les clients localisés à Londres.

Cette procédure pas à pas est orientée code en termes de conception pour mieux montrer les concepts de LINQ to SQL. Normalement, vous utiliseriez le Concepteur Objet Relationnel pour créer votre modèle objet.

Notes

Il est possible que pour certains des éléments de l'interface utilisateur de Visual Studio, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d’informations, consultez Personnalisation de l’IDE.

Cette procédure pas à pas a été écrite à l'aide des paramètres de développement Visual C#.

Prérequis

  • Les fichiers sont stockés dans un dossier dédié, c:\linqtest5. Vous devez créer ce dossier avant de commencer la procédure pas à pas.

  • Cette procédure pas à pas requiert l'exemple de base de données Northwind. Si cette base de données n'est pas disponible sur votre ordinateur de développement, vous pouvez la télécharger à partir du site de téléchargement Microsoft. Pour obtenir des instructions, consultez Téléchargement d’exemples de bases de données. Après avoir téléchargé la base de données, copiez le fichier dans le dossier c:\linqtest5.

Vue d’ensemble

Cette procédure pas à pas se compose de six tâches principales :

  • Création d’une solution LINQ to SQL dans Visual Studio.

  • Mappage d'une classe à une table de base de données.

  • Désignation de propriétés sur la classe pour représenter des colonnes de base de données.

  • Spécification de la connexion à la base de données Northwind.

  • Création d'une requête simple à exécuter sur la base de données.

  • Exécution de la requête et observation des résultats.

Création d'une solution LINQ to SQL

Au cours de cette première tâche, vous allez créer une solution Visual Studio qui contient les références nécessaires pour générer et exécuter un projet LINQ to SQL.

Pour créer une solution LINQ to SQL

  1. Dans le menu Fichier de Visual Studio, pointez sur Nouveau, puis cliquez sur Projet.

  2. Dans le volet Types de projets de la boîte de dialogue Nouveau projet, cliquez sur Visual C#.

  3. Dans le volet Modèles, cliquez sur Application console.

  4. Dans la zone Nom, tapez LinqConsoleApp.

  5. Dans la zone Emplacement, vérifiez où vous souhaitez stocker vos fichiers projet.

  6. Cliquez sur OK.

Ajout de références et de directives LINQ

Cette procédure pas à pas utilise des assemblys qui ne sont pas nécessairement installés par défaut dans votre projet. Si System.Data.Linq n’est pas listé comme référence dans votre projet (développez le nœud Références dans l’Explorateur de solutions), ajoutez-le comme indiqué dans les étapes suivantes.

Pour ajouter System.Data.Linq

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur Références, puis cliquez sur Ajouter une référence.

  2. Dans la boîte de dialogue Ajouter une référence, cliquez sur .NET, sur l’assembly System.Data.Linq, puis sur OK.

    L'assembly est ajouté au projet.

  3. Ajoutez les directives suivantes au haut de Program.cs :

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    

Mappage d'une classe à une table de base de données

Au cours de cette étape, vous allez créer une classe et la mapper à une table de base de données. Ce type de classe est appelé classe d’entité. Notez que le mappage s'effectue simplement en ajoutant l'attribut TableAttribute. La propriété Name spécifie le nom de la table dans la base de données.

Pour créer une classe d'entité et la mapper à une table de base de données

  • Tapez ou collez le code suivant dans Program.cs juste au-dessus de la déclaration de classe Program :

    [Table(Name = "Customers")]
    public class Customer
    {
    }
    

Désignation de propriétés sur la classe pour représenter des colonnes de base de données

Au cours de cette étape, vous allez effectuer plusieurs tâches.

  • Utilisez l'attribut ColumnAttribute pour désigner les propriétés CustomerID et City sur la classe d'entité comme représentant des colonnes de la table de base de données.

  • Désignez la propriété CustomerID comme représentant une colonne de clé primaire dans la base de données.

  • Désignez les champs _CustomerID et _City pour le stockage privé. LINQ to SQL peut ensuite stocker et récupérer directement des valeurs, au lieu d’utiliser des accesseurs publics qui peuvent inclure la logique métier.

Pour représenter les caractéristiques de deux colonnes de base de données

  • Tapez ou collez le code suivant dans Program.cs à l'intérieur des accolades pour la classe Customer.

    private string _CustomerID;
    [Column(IsPrimaryKey=true, Storage="_CustomerID")]
    public string CustomerID
    {
        get
        {
            return this._CustomerID;
        }
        set
        {
            this._CustomerID = value;
        }
    }
    
    private string _City;
    [Column(Storage="_City")]
    public string City
    {
        get
        {
            return this._City;
        }
        set
        {
            this._City=value;
        }
    }
    

Spécification de la connexion à la base de données Northwind

Au cours de cette étape, vous allez utiliser un objet DataContext pour établir une connexion entre vos structures de données basées sur du code et la base de données elle-même. Le DataContext est le canal principal par le biais duquel vous récupérez des objets de la base de données et soumettez des modifications.

Déclarez également un Table<Customer> comme jouant le rôle de table typée logique pour vos requêtes sur la table Customers dans la base de données. La création et l'exécution de ces requêtes s'effectueront dans des étapes ultérieures.

Pour spécifier la connexion de base de données

  • Tapez ou collez le code suivant dans la méthode Main :

    Notez que le fichier northwnd.mdf est censé se trouver dans le dossier linqtest5. Pour plus d'informations, consultez la section Composants requis au début de cette procédure pas à pas.

    // Use a connection string.
    DataContext db = new DataContext
        (@"c:\linqtest5\northwnd.mdf");
    
    // Get a typed table to run queries.
    Table<Customer> Customers = db.GetTable<Customer>();
    

Création d'une requête simple

Au cours de cette étape, vous allez créer une requête pour rechercher les clients localisés à Londres dans la table Customers de la base de données. Le code de requête de cette étape décrit simplement la requête. Il ne l'exécute pas. Cette approche est connue sous le nom d’exécution différée. Pour plus d’informations, consultez Introduction aux requêtes LINQ (C#).

Vous allez aussi produire une sortie de journal pour montrer les commandes SQL générées par LINQ to SQL. Cette fonctionnalité d’enregistrement (qui utilise Log) est utile pour le débogage et pour déterminer que les commandes envoyées à la base de données représentent précisément votre requête.

Pour créer une requête simple

  • Tapez ou collez le code suivant dans la méthode Main après la déclaration Table<Customer> :

    // Attach the log to show generated SQL.
    db.Log = Console.Out;
    
    // Query for customers in London.
    IQueryable<Customer> custQuery =
        from cust in Customers
        where cust.City == "London"
        select cust;
    

Exécution de la requête

Dans cette étape, vous allez exécuter la requête. Les expressions de requête créées au cours des étapes précédentes ne sont pas évaluées tant que les résultats ne sont pas nécessaires. Lorsque vous commencez l'itération foreach, une commande SQL est exécutée sur la base de données et les objets sont matérialisés.

Pour exécuter la requête

  1. Tapez ou collez le code suivant à la fin de la méthode Main (après la description de la requête).

    foreach (Customer cust in custQuery)
    {
        Console.WriteLine("ID={0}, City={1}", cust.CustomerID,
            cust.City);
    }
    
    // Prevent console window from closing.
    Console.ReadLine();
    
  2. Appuyez sur F5 pour déboguer l'application.

    Notes

    Si votre application génère une erreur d’exécution, consultez la section Dépannage de la rubrique Apprentissage par les procédures pas à pas.

    Les résultats de la requête dans la fenêtre de console doivent apparaître comme suit :

    ID=AROUT, City=London

    ID=BSBEV, City=London

    ID=CONSH, City=London

    ID=EASTC, City=London

    ID=NORTS, City=London

    ID=SEVES, City=London

  3. Appuyez sur Entrée dans la fenêtre de console pour fermer l'application.

Étapes suivantes

La rubrique Procédure pas à pas : interrogation de relations (C#) est la suite de cette procédure pas à pas. La procédure pas à pas Interrogation de relations montre comment LINQ to SQL peut interroger des tables, comme les jointures dans une base de données relationnelle.

Si vous souhaitez suivre la procédure pas à pas Interrogation de relations, pensez à enregistrer la solution de la procédure que vous venez d'exécuter car elle est indispensable.

Voir aussi