Entity Framework - SQL nativo

No Entity Framework, você pode consultar suas classes de entidade usando LINQ. Você também pode executar consultas usando SQL bruto diretamente no banco de dados usando DbCOntext. As técnicas podem ser aplicadas igualmente a modelos criados com Code First e EF Designer.

Consulta SQL em entidade existente

O método SqlQuery em DbSet permite que uma consulta SQL bruta seja escrita que retornará instâncias de entidade. Os objetos retornados serão rastreados pelo contexto da mesma forma que seriam se fossem retornados por uma consulta LINQ. Por exemplo -

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

O código acima irá recuperar todos os alunos do banco de dados.

Consulta SQL para tipos de não entidade

Uma consulta SQL que retorna instâncias de qualquer tipo, incluindo tipos primitivos, pode ser criada usando o método SqlQuery na classe Database. Por exemplo -

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

Comandos SQL para o banco de dados

O método ExecuteSqlCommnad é usado no envio de comandos que não são de consulta ao banco de dados, como o comando Inserir, Atualizar ou Excluir. Vamos dar uma olhada no código a seguir, no qual o nome do aluno é atualizado como 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();
      }
   }
}

O código acima irá recuperar o primeiro nome de todos os alunos do banco de dados.