我非常推崇使用命名参数代替基于字符串的参数注入。这种做法具有类型安全性,可以避免大多数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");
有没有一种方法可以在实体框架DbSqlQuery类中使用命名参数?
指定的参数名':p0'无效。参数名必须以字母开头,只能包含字母,数字和下划线。
的错误提示。 - NibblyPig