Entity Framework 4.1 を使用して ASP.Net MVC 3 アプリケーションを開発しています。実行する必要がある特定の複雑なクエリについて、未加工の SQL クエリを作成し、それを組み込みのdbSet.SqlQueryメソッドに渡すことにしました。
SQL クエリを query という文字列変数に割り当てる以下のような Service メソッドがあります。クエリには 2 つのパラメーターが渡されるため、SQL インジェクションを防ぐためにこれらをパラメーター化しました。
public IList<User> GetAvailableLocums(int shiftID, int shiftDateID)
{
var query ="Select .... where t1 = @p0 and t2 = @p1";
ObjectParameter _shiftID = new ObjectParameter("p0", shiftID);
ObjectParameter _shiftDateID = new ObjectParameter("p1", shiftDateID);
object[] parameters = new object[] { _shiftID, _shiftDateID };
return _UoW.User.GetWithRawSql(query, parameters).ToList();
}
次に、クエリとパラメーターを、クエリを実行するリポジトリ内のメソッドに渡します。
public IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters)
{
return dbSet.SqlQuery(query, parameters).ToList();
}
SQL Server Management Studio でテストしたので、クエリが正しいことはわかっていますが、現在、このコードを実行しようとすると次のエラーが発生します。
オブジェクト型 System.Data.Objects.ObjectParameter から既知のマネージド プロバイダーのネイティブ型へのマッピングは存在しません
これを修正する方法について何か提案はありますか?
ご協力いただきありがとうございます。