Bạn có thể thực thi truy vấn native SQL thô dựa vào CSDL sử dụng DBContext. Bạn có thể thực thi những kiểu truy vấn sau:

  1. Truy vấn SQL cho những kiểu thực thể trả về những kiểu riêng của thực thể.
  2. Truy vấn SQL cho những kiểu không phải thực thể trả về một kiểu dữ liệu nguyên thủy.
  3. Những lệnh SQL thô với CSDL.

Truy vấn SQL cho những kiểu thực thể:

Cũng như chúng ta đã nhìn thấy trong những phần trước DBSet có phương thức SQLQuery() để viết những truy vấn SQL thô và trả về những thể hiện của thực thể. Những đối tượng trả về sẽ được theo dõi bởi context, cũng giống như chúng sẽ được nếu trả về bởi một truy vấn LINQ. VD:

using (var ctx = new SchoolDBEntities())
{
    var studentList = ctx.Students.SqlQuery("Select * from Student").ToList<Student>();
}

Tuy nhiên những cột trả về bởi truy vấn SQL nên khớp với thuộc tính của một tập thực thể của DBSet nếu không nó sẽ ném ra một exception. VD:

using (var ctx = new  SchoolDBEntities())
{                
    var studentName = ctx.Students.SqlQuery("Select studentid, studentname 
        from Student where studentname='New Student1'").ToList();
}

Nếu bạn thay đổi tên cột trong truy vấn thì nó sẽ ném ra một exception bởi vì nó phải khớp với tên cột:

using (var ctx = new SchoolDBEntities())
{                
    //this will throw an exception
    var studentName = ctx.Students.SqlQuery("Select studentid as id, studentname as name 
            from Student where studentname='New Student1'").ToList();
}

Truy vấn SQL cho những kiểu không phải thực thể:

Một truy vấn SQL trả về thể hiện của bất kỳ kiểu nào bao gồm những kiểu nguyên thủy có thể được tạo bằng cách dùng phương thức SqlQuery của lớp Database. VD:

using (var ctx = new SchoolDBEntities())
{
    //Get student name of string type
    string studentName = ctx.Database.SqlQuery<string>("Select studentname 
        from Student where studentid=1").FirstOrDefault<string>();
}

Những lệnh SQL thô tới CSDL:

Phương thức ExecuteSqlCommnad là hưu ích trong việc gửi những lệnh non-query tới CSDL như là lệnh Insert, Update và Delete. VD:

using (var ctx = new SchoolDBEntities())
{

    //Update command
    int noOfRowUpdated = ctx.Database.ExecuteSqlCommand("Update student 
            set studentname ='changed student by command' where studentid=1");
    //Insert command
    int noOfRowInserted = ctx.Database.ExecuteSqlCommand("insert into student(studentname) 
            values('New Student')");
    //Delete command
    int noOfRowDeleted = ctx.Database.ExecuteSqlCommand("delete from student 
            where studentid=1");
}

Nguồn: http://www.entityframeworktutorial.net/

Advertisements