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();

さて、Entity Frameworkでは、(このリンク上で)単純なString.Formatステートメントと文字列インジェクションに回帰したように見えます:(説明のために簡略化されています)

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

Entity Framework 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 に答える