Entity Framework: SQL nativo
En Entity Framework puede consultar sus clases de entidad usando LINQ. También puede ejecutar consultas usando SQL sin procesar directamente contra la base de datos usando DbCOntext. Las técnicas se pueden aplicar igualmente a modelos creados con Code First y EF Designer.
Consulta SQL sobre entidad existente
El método SqlQuery en DbSet permite escribir una consulta SQL sin formato que devolverá instancias de entidad. Los objetos devueltos serán rastreados por el contexto tal como lo serían si fueran devueltos por una consulta LINQ. Por ejemplo
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();
}
}
}
El código anterior recuperará a todos los estudiantes de la base de datos.
Consulta SQL para tipos que no son entidades
Se puede crear una consulta SQL que devuelva instancias de cualquier tipo, incluidos los tipos primitivos, utilizando el método SqlQuery en la clase Database. Por ejemplo
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 a la base de datos
El método ExecuteSqlCommnad se utiliza para enviar comandos que no son de consulta a la base de datos, como el comando Insertar, Actualizar o Eliminar. Echemos un vistazo al siguiente código en el que el nombre del estudiante se actualiza 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();
}
}
}
El código anterior recuperará el nombre de todos los estudiantes de la base de datos.