当使用DbSet <t> .SqlQuery()时,如何使用命名参数?</t>

时间:2012-10-17 00:57:00

标签: sql entity-framework sql-injection

我非常喜欢使用命名参数而不是基于字符串的参数注入。它对大多数形式的SQL注入都是类型安全且安全的。在旧的ADO.NET中,我会为我的查询创建一个SqlCommand对象和一堆SqlParameters。

var sSQL = "select * from Users where Name = @Name";
var cmd = new SqlCommand(conn, sSQL);
cmd.Parameters.AddWithValue("@Name", "Bob");
cmd.ExecuteReader();

现在,在Entity Framework中,它(在此链接上)似乎已经回归到一个简单的String.Format语句和字符串注入:(简化讨论)

MyRepository.Users.SqlQuery("Select * from Users where Name = {0}", "Bob");

有没有办法在Entity Framework DbSqlQuery类中使用命名参数?

2 个答案:

答案 0 :(得分:4)

var param = new ObjectParameter(":p0", "Bob");
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param);

答案 1 :(得分:3)

由于我无法发表评论,我正在修复另一个答案:

var param = new ObjectParameter("p0", "Bob");
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param);

实例化ObjectParameter时,不必在名称上放置冒号。这就是为什么SLC得到了他在评论中提到的错误。