6

我非常喜欢使用命名参数而不是基于字符串的参数注入。对于大多数形式的 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();

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

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

有没有办法在实体框架 DbSqlQuery 类中使​​用命名参数?

4

2 回答 2

4
var param = new ObjectParameter(":p0", "Bob");
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param);
于 2012-10-17T01:02:54.560 回答
3

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

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

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

于 2014-03-25T17:46:49.390 回答