Khung thực thể - SQL gốc
Trong Khung thực thể, bạn có thể truy vấn với các lớp thực thể của mình bằng LINQ. Bạn cũng có thể chạy các truy vấn bằng SQL thô trực tiếp đối với cơ sở dữ liệu bằng DbCOntext. Các kỹ thuật này có thể được áp dụng như nhau cho các mô hình được tạo bằng Code First và EF Designer.
Truy vấn SQL trên thực thể hiện có
Phương thức SqlQuery trên DbSet cho phép viết một truy vấn SQL thô sẽ trả về các thể hiện thực thể. Các đối tượng được trả về sẽ được theo dõi bởi ngữ cảnh giống như chúng sẽ được theo dõi nếu chúng được trả về bởi một truy vấn LINQ. Ví dụ -
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ạn mã trên sẽ lấy tất cả học sinh từ cơ sở dữ liệu.
Truy vấn SQL cho các loại không phải thực thể
Có thể tạo truy vấn SQL trả về các thể hiện thuộc bất kỳ kiểu nào, kể cả kiểu nguyên thủy bằng phương thức SqlQuery trên lớp Cơ sở dữ liệu. Ví dụ -
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();
}
}
}
Lệnh SQL cho cơ sở dữ liệu
Phương thức ExecuteSqlCommnad được sử dụng để gửi các lệnh không truy vấn đến cơ sở dữ liệu, chẳng hạn như lệnh Chèn, Cập nhật hoặc Xóa. Hãy xem đoạn mã sau, trong đó tên của sinh viên được cập nhật là 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ạn mã trên sẽ lấy ra tất cả tên của học sinh từ cơ sở dữ liệu.