Entity Framework - SQL nativo

In Entity Framework puoi eseguire query con le tue classi di entità usando LINQ. È inoltre possibile eseguire query utilizzando SQL raw direttamente sul database utilizzando DbCOntext. Le tecniche possono essere applicate allo stesso modo ai modelli creati con Code First ed EF Designer.

Query SQL su entità esistente

Il metodo SqlQuery su DbSet consente di scrivere una query SQL non elaborata che restituirà istanze di entità. Gli oggetti restituiti verranno tracciati dal contesto proprio come lo sarebbero se fossero restituiti da una query LINQ. Ad esempio:

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();
      }
   }
}

Il codice precedente recupererà tutti gli studenti dal database.

Query SQL per tipi non entità

Una query SQL che restituisce istanze di qualsiasi tipo, inclusi i tipi primitivi, può essere creata utilizzando il metodo SqlQuery sulla classe Database. Ad esempio:

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();
      }
   }
}

Comandi SQL al database

Il metodo ExecuteSqlCommnad viene utilizzato per inviare comandi non di query al database, come il comando Inserisci, Aggiorna o Elimina. Diamo un'occhiata al seguente codice in cui il nome dello studente viene aggiornato come 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();
      }
   }
}

Il codice precedente recupererà il nome di tutti gli studenti dal database.