使用DbSet时<;T>;。SqlQuery(),如何使用命名参数?

使用DbSet时<;T>;。SqlQuery(),如何使用命名参数?,sql,entity-framework,sql-injection,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.Execute

我非常喜欢使用命名参数而不是基于字符串的参数注入。它是类型安全的,对大多数形式的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语句和字符串注入:(简化以供讨论)


有没有一种方法可以将命名参数用于实体框架DbSqlQuery类?

因为我不能评论,所以我正在修复另一个答案:

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

实例化ObjectParameter时,不必在名称上加冒号。这就是SLC在评论中提到的错误的原因。

哪里有记录?SQL主体中允许哪些名称格式?它不能支持@name样式吗?@EricFalsken。您可以在中看到,此\@name样式是受支持的。这对我完全不起作用,它没有文档记录,您只需获得
指定的参数名称:p0'无效。参数名称必须以字母开头,并且只能包含字母、数字和下划线。
var param = new ObjectParameter("p0", "Bob");
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param);