首页 > 代码库 > EF执行SQL语句和存储过程

EF执行SQL语句和存储过程

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语句和存储过程