Entity Framework - SQL natif

Dans Entity Framework, vous pouvez interroger vos classes d'entité à l'aide de LINQ. Vous pouvez également exécuter des requêtes à l'aide de SQL brut directement sur la base de données à l'aide de DbCOntext. Les techniques peuvent être appliquées de la même manière aux modèles créés avec Code First et EF Designer.

Requête SQL sur une entité existante

La méthode SqlQuery sur DbSet permet d'écrire une requête SQL brute qui retournera des instances d'entité. Les objets retournés seront suivis par le contexte comme ils le seraient s'ils étaient renvoyés par une requête LINQ. Par exemple -

class Program {

   static void Main(string[] args) {

      using (var context = new UniContextEntities()) {

         var students = context.Students.SqlQuery("SELECT * FROM dbo.Student").ToList();

         foreach (var student in students) {
            string name = student.FirstMidName + " " + student.LastName;
            Console.WriteLine("ID: {0}, Name: {1}, \tEnrollment Date {2} ",
               student.ID, name, student.EnrollmentDate.ToString());
         }

         Console.ReadKey();
      }
   }
}

Le code ci-dessus récupérera tous les étudiants de la base de données.

Requête SQL pour les types non-entité

Une requête SQL renvoyant des instances de tout type, y compris les types primitifs, peut être créée à l'aide de la méthode SqlQuery sur la classe Database. Par exemple -

class Program {

   static void Main(string[] args) {

      using (var context = new UniContextEntities()) {

         var studentNames = context.Database.SqlQuery
            <string>("SELECT FirstMidName FROM dbo.Student").ToList();

         foreach (var student in studentNames) {
            Console.WriteLine("Name: {0}", student);
         }

         Console.ReadKey();
      }
   }
}

Commandes SQL vers la base de données

La méthode ExecuteSqlCommnad est utilisée pour envoyer des commandes sans requête à la base de données, telles que la commande Insérer, Mettre à jour ou Supprimer. Jetons un coup d'œil au code suivant dans lequel le prénom de l'élève est mis à jour sous la forme ID = 1

class Program {

   static void Main(string[] args) {

      using (var context = new UniContextEntities()) {

         //Update command

         int noOfRowUpdated = context.Database.ExecuteSqlCommand("Update 
            student set FirstMidName = 'Ali' where ID = 1");

         context.SaveChanges();

         var student = context.Students.SqlQuery("SELECT * FROM
            dbo.Student where ID = 1").Single();

         string name = student.FirstMidName + " " + student.LastName;

         Console.WriteLine("ID: {0}, Name: {1}, \tEnrollment Date {2} ", 
            student.ID, name, student.EnrollmentDate.ToString());

         Console.ReadKey();
      }
   }
}

Le code ci-dessus récupérera le prénom de tous les étudiants de la base de données.