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语句换成存储过程的名称即可
转载于:https://www.cnblogs.com/hebutyll/p/6870044.html