<p>推荐使用FromSqlRaw、ExecuteSqlRaw或FromSqlInterpolated配合参数化查询防止SQL注入。1. 查询实体用FromSqlRaw,如:context.Users.FromSqlRaw("SELECT FROM Users WHERE Id = {0}", userId).ToList();2. 复杂场景可用SqlParameter明确指定参数,如:new SqlParameter("@name", "张%");3. 执行非查询语句用ExecuteSqlRaw,如:context.Database.ExecuteSqlRaw("UPDATE Users SET Name = {0} WHERE Id = {1}", newName, id);4. 推荐使用FromSqlInterpolated,支持字符串插值并自动参数化,如:context.Users.FromSqlInterpolated($"SELECT FROM Users WHERE Age > {age}").ToList()。关键始终是避免拼接SQL,使用参数化确保安全。</p>

在C#中使用EF Core执行带参数的原始SQL查询,推荐使用 FromSqlRaw 或 ExecuteSqlRaw 方法,并配合参数化查询来防止SQL注入。下面介绍常见用法和示例。
当你想从数据库中查询实体(如映射到某个 DbSet 的表),可以使用 FromSqlRaw 并传入带参数的SQL语句:
var userId = 1;
var users = context.Users
.FromSqlRaw("SELECT * FROM Users WHERE Id = {0}", userId)
.ToList();
说明:
{0} 是参数占位符,EF Core 会自动将其替换为安全的参数化形式,避免SQL注入。
支持多个参数,例如:
"SELECT * FROM Users WHERE Age > {0} AND Name LIKE {1}"
对于复杂场景或需要明确指定数据库类型时,可使用 SqlParameter:
var nameParam = new SqlParameter("@name", "张%");
var users = context.Users
.FromSqlRaw("SELECT * FROM Users WHERE Name LIKE @name", nameParam)
.ToList();
优势: 可以设置参数类型、大小等,更贴近原生SQL控制。
用于执行 INSERT、UPDATE、DELETE 等操作:
var newName = "李四";
var id = 1;
context.Database.ExecuteSqlRaw(
"UPDATE Users SET Name = {0} WHERE Id = {1}",
newName, id);
该方法返回受影响的行数,适用于不返回实体的命令。
EF Core 也支持字符串插值语法 FromSqlInterpolated,更直观且安全:
var age = 18;
var users = context.Users
.FromSqlInterpolated($"SELECT * FROM Users WHERE Age > {age}")
.ToList();
内部自动将插值表达式转为参数化查询,兼具可读性与安全性。
基本上就这些常用方式。关键点是:不要拼接SQL字符串,始终使用参数占位符或 SqlParameter 来传参,确保应用安全。
以上就是C#中如何使用EF Core的原始SQL查询带参数?示例是什么?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号