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语句换成存储过程的名称即可
时间: 2024-12-25 00:51:22