LINQ - Entités

Faisant partie de ADO.NET Entity Framework, LINQ to Entities est plus flexible que LINQ to SQL, mais n'est pas très populaire en raison de sa complexité et de son manque de fonctionnalités clés. Cependant, il n'a pas les limitations de LINQ to SQL qui autorise la requête de données uniquement dans la base de données du serveur SQL car LINQ to Entities facilite la requête de données dans un grand nombre de fournisseurs de données comme Oracle, MySQL, etc.

De plus, il bénéficie d'un support majeur d'ASP.Net dans le sens où les utilisateurs peuvent utiliser un contrôle de source de données pour exécuter une requête via LINQ to Entities et facilite la liaison des résultats sans aucun codage supplémentaire.

LINQ to Entities est devenu pour ces avantages le mécanisme standard pour l'utilisation de LINQ sur les bases de données de nos jours. Il est également possible avec LINQ to Entities de modifier les détails des données interrogées et de valider facilement une mise à jour par lots. Le fait le plus intriguant à propos de LINQ to Entities est qu'il a la même syntaxe que celle de SQL et même le même groupe d'opérateurs de requête standard tels que Join, Select, OrderBy, etc.

Processus de création et d'exécution de requêtes LINQ to Entities

  • Construction d'un ObjectQuery instance hors d'un ObjectContext (Connexion d'entité)

  • Composer une requête en C # ou en Visual Basic (VB) à l'aide de l'instance nouvellement construite

  • Conversion d'opérateurs de requête standard de LINQ ainsi que d'expressions LINQ en arborescences de commandes

  • Exécution de la requête en transmettant directement les exceptions rencontrées au client

  • Renvoyer au client tous les résultats de la requête

ObjectContext est ici la classe principale qui permet l'interaction avec Entity Data Modelou en d'autres termes agit comme un pont qui connecte LINQ à la base de données. Les arborescences de commandes sont ici une représentation de requête avec compatibilité avec le framework Entity.

L'Entity Framework, d'autre part, est en fait Object Relational Mapperabrégé généralement en ORM par les développeurs qui effectue la génération d'objets métier ainsi que d'entités selon les tables de la base de données et facilite diverses opérations de base telles que la création, la mise à jour, la suppression et la lecture. L'illustration suivante montre la structure d'entité et ses composants.

Exemple d'ADD, UPDATE et DELETE à l'aide de LINQ avec Entity Model

Ajoutez d'abord le modèle d'entité en suivant les étapes ci-dessous.

Step 1- Cliquez avec le bouton droit sur le projet et cliquez sur Ajouter un nouvel élément pour ouvrir la fenêtre ci-dessous. Sélectionnez ADO.NET Entity Data Model et spécifiez le nom et cliquez sur Ajouter.

Step 2 - Sélectionnez Generate from database.

Step 3 - Choisissez Connexion à la base de données dans le menu déroulant.

Step 4 - Sélectionnez toutes les tables.

Maintenant, écrivez le code suivant.

using DataAccess;
using System;
using System.Linq;

namespace LINQTOSQLConsoleApp {
   public class LinqToEntityModel {
      static void Main(string[] args) {

         using (LinqToSQLDBEntities context = new LinqToSQLDBEntities()) {
            //Get the List of Departments from Database
            var departmentList = from d in context.Departments
            select d;

            foreach (var dept in departmentList) {
               Console.WriteLine("Department Id = {0} , Department Name = {1}",
                  dept.DepartmentId, dept.Name);
            }

            //Add new Department
            DataAccess.Department department = new DataAccess.Department();
            department.Name = "Support";

            context.Departments.Add(department);
            context.SaveChanges();

            Console.WriteLine("Department Name = Support is inserted in Database");

            //Update existing Department
            DataAccess.Department updateDepartment = context.Departments.FirstOrDefault(d ⇒d.DepartmentId == 1);
            updateDepartment.Name = "Account updated";
            context.SaveChanges();

            Console.WriteLine("Department Name = Account is updated in Database");

            //Delete existing Department
            DataAccess.Department deleteDepartment = context.Departments.FirstOrDefault(d ⇒d.DepartmentId == 3);
            context.Departments.Remove(deleteDepartment);
            context.SaveChanges();

            Console.WriteLine("Department Name = Pre-Sales is deleted in Database");

            //Get the Updated List of Departments from Database
            departmentList = from d in context.Departments
            select d;

            foreach (var dept in departmentList) {
               Console.WriteLine("Department Id = {0} , Department Name = {1}",
                  dept.DepartmentId, dept.Name);
            }
         }

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -