<p>使用EF Core执行原生SQL可通过FromSqlRaw查询实体数据,如context.Products.FromSqlRaw("SELECT FROM Products WHERE Price > {0}", 100);执行非查询操作使用ExecuteSqlRaw,如批量更新context.Database.ExecuteSqlRaw("UPDATE Products SET Price = Price 1.1 WHERE CategoryId = {0}", categoryId);查询非实体类型数据可结合ADO.NET,通过context.Database.GetDbConnection()执行复杂查询并读取结果;推荐使用FromSqlInterpolated实现参数内插,如FromSqlInterpolated($"SELECT * FROM Products WHERE Price > {minPrice}"),自动参数化更安全。</p>

在使用 C# 的 EF Core 时,虽然 LINQ 查询已经非常强大,但在某些复杂场景下,比如多表联查、聚合统计或调用数据库函数时,直接执行原生 SQL 更加灵活高效。EF Core 提供了多种方式来执行原生 SQL 查询,既能查询数据,也能执行插入、更新、删除等操作。
当需要从数据库中查询实体数据时,FromSqlRaw 是最常用的方法。它允许你在 DbSet 上执行原始 SQL 查询,返回的结果必须映射到实体类型。
例如,假设你有一个 Product 实体:
public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } }你可以这样执行原生 SQL 查询:
var products = context.Products.FromSqlRaw("SELECT * FROM Products WHERE Price > {0}", 100).ToList();注意:SQL 中的参数应使用 {0} 占位符,避免拼接字符串,防止 SQL 注入。
对于不返回数据的操作,如修改或删除,可以使用 ExecuteSqlRaw 方法。
例如,批量更新价格:
context.Database.ExecuteSqlRaw("UPDATE Products SET Price = Price * 1.1 WHERE CategoryId = {0}", categoryId);这个方法返回受影响的行数,适合用于写操作。
有时候你需要查询的数据并不对应某个实体类,比如统计结果或视图数据。这时可以结合 Ado.NET 使用原生 ADO 操作。
通过 Database.GetDbConnection() 获取连接:
using var connection = context.Database.GetDbConnection();这种方式适用于无法映射到实体的复杂查询。
EF Core 还提供了 FromSqlInterpolated,支持字符串内插语法,写起来更直观:
var minPrice = 50;它会自动处理参数化,安全性高,推荐在支持的场景中使用。
基本上就这些。根据实际需求选择合适的方法:查询实体用 FromSqlRaw 或 FromSqlInterpolated,执行命令用 ExecuteSqlRaw,复杂结果集则搭配 ADO.NET 处理。只要注意参数化和映射问题,原生 SQL 在 EF Core 中用起来很顺手。
以上就是C# 如何在 EF Core 中执行原生 SQL 查询_C# EF Core 原生 SQL 查询方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号