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.