C#安全地构建一个SQL字符串以使用实体框架执行

本文关键字:字符串 实体 执行 框架 SQL 一个 构建 安全 | 更新日期: 2023-09-27 18:24:50

我正在使用EF和.SqlQuery(string sql)命令执行一些SQL。

我想确保我的sql字符串完全净化,所以逻辑方法是使用带有参数的SqlCommand对象来构建它

然而,我不想使用SqlCommand执行它,我只想让SqlCommand吐出一个字符串,我可以将它插入到我的EF .SqlQuery(...)调用中。

有没有办法做到这一点,或者另一种方法来确保我的.SqlQuery不会导致注射?

C#安全地构建一个SQL字符串以使用实体框架执行

EF不支持开箱即用吗?

您应该能够使用参数调用SqlQuery,因此它将负责SQL注入等,就像SqlCommand所做的那样:

var tests = context.Database.SqlQuery<Test>(
    @"SELECT Id, Name FROM tests where Name={0}", "TestName");

或。。

var tests = context.Database.SqlQuery<Test>(
    @"SELECT Id, Name FROM tests where Name=@name", 
    new SqlParameter("@name", "TestName"));

获取SqlCommand的CommandText属性。

string query = cmd.CommandText;
foreach (SqlParameter p in cmd.Parameters)
{
    query = query.Replace(p.ParameterName, p.Value.ToString());
}