EF執行SQL語句和存儲過程
阿新 • • 發佈:2017-05-18
div spa rip mman code rom {0} base result EF雖然使用對象化的方式避免了我們寫SQL,但是對於部分SQL,例如需要復雜的查詢、執行插入和刪除等可以操作,直接執行SQL可以減少減少性能上的損失。
使用EF執行SQL可以通過ExecuteSqlCommand()和SqlQuery()兩個方法。這兩個方法適用場景如下:
- ExecuteSqlCommand()不返回執行的結果,只返回受影響的行數,所以適用於數據庫修改,數據創建,更新和刪除等操作;
- SqlQuery()則會返回查詢到的結果,並將結果保存在數據實體中;
- 使用ExecuteSqlCommand()示例:
1 string sql = @"INSERT INTO region(RegionID, RegionDescription) VALUES(@regionId, @regionDescription)"; 2 var result = context.Database.ExecuteSqlCommand(sql, 3 new MySqlParameter("@regionId", 5), 4 new MySqlParameter("@regionDescription", "Center")); 5 if (result >= 1) 6 { 7 Console.WriteLine("插入新數據成功"); 8 } 9 else 10 { 11 Console.WriteLine("插入數據失敗"); 12 } 13 string sql = @"DELETE FROM region WHERE RegionID = @regionId"; 14 var result = context.Database.ExecuteSqlCommand(sql,15 new MySqlParameter("@regionId", 5)); 16 if (result >= 1) 17 { 18 Console.WriteLine("刪除數據成功"); 19 } 20 else 21 { 22 Console.WriteLine("刪除數據失敗"); 23 }
- 使用SqlQuery<T>()示例:
1 string sql = @"SELECT RegionID, RegionDescription FROM region"; 2 var result = context.Database.SqlQuery<Region>(sql); 3 foreach (Region region in result) 4 { 5 Console.WriteLine("Region = {0}, RegionDescription = {1}", 6 region.RegionId, region.RegionDescription); 7 }
- 使用DbSet<T>的SqlQuery()方法執行查詢
1 var result = context.Database.SqlQuery<Region>(sql);
- 使用EF執行存儲過程
也可以使用ExecuteSqlCommand()和SqlQuery<T>()執行存儲過程,只需要將示例中的SQL語句換成存儲過程的名稱即可
EF執行SQL語句和存儲過程