1. 程式人生 > >EF執行SQL語句和存儲過程

EF執行SQL語句和存儲過程

div spa rip mman code rom {0} base result

EF雖然使用對象化的方式避免了我們寫SQL,但是對於部分SQL,例如需要復雜的查詢、執行插入和刪除等可以操作,直接執行SQL可以減少減少性能上的損失。 使用EF執行SQL可以通過ExecuteSqlCommand()SqlQuery()兩個方法。這兩個方法適用場景如下:
  1. ExecuteSqlCommand()不返回執行的結果,只返回受影響的行數,所以適用於數據庫修改,數據創建,更新和刪除等操作;
  2. 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語句和存儲過程