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

Nib*_*Pig 6 c# sql entity-framework

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

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

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

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

Pet*_*sen 12

EF不支持开箱即用吗?

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

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

要么..

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