C#安全地构建一个使用Entity Framework执行的SQL字符串

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

我想确保我的sql字符串被完全清理,因此逻辑方法是使用带参数的SqlCommand对象来构建它。

但是我不想使用SqlCommand执行它,我只是希望SqlCommand吐出一个字符串,我可以插入我的EF .SqlQuery(...)调用。

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

EF不支持开箱即用吗?

您应该能够使用参数调用SqlQuery ,因此它将处理SQL注入等,就像SqlCommand一样:

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

要么..

 var tests = context.Database.SqlQuery( @"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()); }