Entity Framework執行原生SQL語句


ExecuteSqlCommand為執行命令的接口, SqlQuery 為返回查詢結果

1、Database.ExecuteSqlCommand 方法 (String, Object[])

對數據庫執行給定的 DDL/DML 命令。 與接受 SQL 的任何 API 一樣,對任何用戶輸入進行參數化以便避免 SQL 注入攻擊是十分重要的。 您可以在 SQL 查詢字符串中包含參數占位符,然后將參數值作為附加參數提供。 您提供的任何參數值都將自動轉換為 DbParameter。context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您還可以構造一個 DbParameter 並將它提供給 SqlQuery。 這允許您在 SQL 查詢字符串中使用命名參數。 context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));

2、Database.SqlQuery 方法 (Type, String, Object[])

創建一個原始 SQL 查詢,該查詢將返回給定類型的元素。 類型可以是包含與從查詢返回的列名匹配的屬性的任何類型,也可以是簡單的基元類型。 該類型不必是實體類型。 即使返回對象的類型是實體類型,上下文也決不會跟蹤此查詢的結果。 使用 SqlQuery(String, Object[]) 方法可返回上下文跟蹤的實體。 與接受 SQL 的任何 API 一樣,對任何用戶輸入進行參數化以便避免 SQL 注入攻擊是十分重要的。 您可以在 SQL 查詢字符串中包含參數占位符,然后將參數值作為附加參數提供。 您提供的任何參數值都將自動轉換為 DbParameter。 context.Database.SqlQuery(typeof(Post), "SELECT * FROM dbo.Posts WHERE Author = @p0", userSuppliedAuthor); 或者,您還可以構造一個 DbParameter 並將它提供給 SqlQuery。 這允許您在 SQL 查詢字符串中使用命名參數。 context.Database.SqlQuery(typeof(Post), "SELECT * FROM dbo.Posts WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));

 

實例:

 

 1  var stu = dbContext.Student.FirstOrDefault<Student>(t => t.Id == 1);
 2 
 3                 var list2 = from a in dbContext.Student
 4                             join b in dbContext.Course
 5                             on a.Id equals b.StudentId
 6                             where a.Id == 1
 7                             select new { a.Name, a.Sex, a.Aage, b.CourseName };
 8                 gridView.DataSource = list2.ToList();
 9                 gridView.DataBind();
10 
11                 var cnt = dbContext.Database.ExecuteSqlCommand("update student  set name=@name where id = @id", new SqlParameter[] {
12                 new SqlParameter("@id", 10),
13                 new SqlParameter("@name","學生姓名") });//執行更新操作
14 
15                 var res = dbContext.Database.SqlQuery<Student2>("select Id,name from student where id=@id", new SqlParameter[] {
16                     new SqlParameter("@id",10) });
17                 //返回數據
18                 //var res = dbContext.Database.SqlQuery<Student2>("select Id,name from student where id=@id", new SqlParameter("@id", 10));
19                 gridView.DataSource = res.ToList();
20                 gridView.DataBind();

 

ps:Student2不一定為映射的實體對象,可以為自定義其他對象,但實體對象的屬性數量必須多余或等於SqlQuery查詢語句中查詢返回的列數量。

參考:

https://msdn.microsoft.com/zh-cn/library/system.data.entity.database.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM