Entity Framework - natywny SQL
W Entity Framework możesz wykonywać zapytania dotyczące klas jednostek przy użyciu LINQ. Możesz również uruchamiać zapytania przy użyciu surowego kodu SQL bezpośrednio w bazie danych za pomocą DbCOntext. Techniki można stosować w równym stopniu do modeli utworzonych za pomocą Code First i EF Designer.
Zapytanie SQL dotyczące istniejącej jednostki
Metoda SqlQuery w DbSet umożliwia napisanie surowego zapytania SQL, które zwróci wystąpienia jednostki. Zwrócone obiekty będą śledzone przez kontekst, tak jak byłyby, gdyby zostały zwrócone przez zapytanie LINQ. Na przykład -
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();
}
}
}
Powyższy kod pobierze wszystkich uczniów z bazy danych.
Zapytanie SQL dla typów niebędących jednostkami
Zapytanie SQL zwracające wystąpienia dowolnego typu, w tym typy pierwotne, można utworzyć przy użyciu metody SqlQuery w klasie Database. Na przykład -
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();
}
}
}
Polecenia SQL do bazy danych
Metoda ExecuteSqlCommnad służy do wysyłania poleceń niebędących zapytaniami do bazy danych, takich jak polecenie Insert, Update lub Delete. Przyjrzyjmy się poniższemu kodowi, w którym imię ucznia jest aktualizowane jako 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();
}
}
}
Powyższy kod pobierze imiona wszystkich uczniów z bazy danych.