C#系列-C#EF框架执行SQL查询语句(25)

 C#中,使用Entity Framework (EF)框架执行原始的SQL查询语句有几种方法。以下是一些常见的方法:

使用DbContext.Database.ExecuteSqlCommand执行非查询SQL命令

ExecuteSqlCommand方法用于执行不返回结果集的SQL命令,如INSERTUPDATEDELETE等。

csharp代码

using (var context = new MyDbContext())

{

string sql = "UPDATE Customers SET Age = 25 WHERE CustomerId = 1";

int rowsAffected = context.Database.ExecuteSqlCommand(sql);

}

使用DbContext.Database.SqlQuery执行查询并返回实体列表

如果你想要执行查询并获取实体列表,可以使用SqlQuery方法。这里T是你想要将结果映射到的实体类型。

csharp代码

using (var context = new MyDbContext())

{

string sql = "SELECT * FROM Customers WHERE CustomerId = 1";

var customer = context.Database.SqlQuery(sql).FirstOrDefault();

}

使用DbSet.FromSqlRawDbSet.FromSqlInterpolated执行查询并返回实体列表

这些方法允许你在DbSet上执行原始的SQL查询,并返回该DbSet类型的实体列表。

csharp代码

using (var context = new MyDbContext())

{

string sql = "SELECT * FROM Customers WHERE CustomerId = {0}", customerId;

var customers = context.Customers.FromSqlRaw(sql, customerId).ToList();

// 或者使用字符串插值(C# 6.0及以上版本)

var customerId = 1;

var customersInterpolated = context.Customers.FromSqlInterpolated($"SELECT * FROM Customers WHERE CustomerId = {customerId}").ToList();

}

使用DbContext.Set.SqlQuery执行查询并返回实体列表(已过时)

DbSet.SqlQuery方法现在已经被标记为过时,推荐使用FromSqlRawFromSqlInterpolated

csharp代码

// 注意:此方法已过时

using (var context = new MyDbContext())

{

string sql = "SELECT * FROM Customers WHERE CustomerId = @p0";

var customer = context.Customers.SqlQuery(sql, 1).FirstOrDefault();

}

注意事项

  • 执行原始SQL查询时,请确保你信任该查询的来源,以防止SQL注入攻击。
  • 使用参数化查询(如上面的@p0示例)可以提高安全性,并防止SQL注入。
  • 当使用FromSqlRawFromSqlInterpolated时,EF Core会尝试将查询结果映射到实体类型上。因此,请确保SQL查询选择的列与实体类型的属性匹配。
  • 如果你的SQL查询很复杂或涉及多个表,可能需要创建一个DTO(数据传输对象)来映射查询结果,而不是直接使用实体类型。

根据你的需求和EF Core的版本,你可能会选择使用不同的方法来执行原始SQL查询。建议查看你所使用的EF Core版本的官方文档,以获取最新和最详细的信息。

你可能感兴趣的:(C#系列,数据库,服务器,c#,开发语言)