0

IQueryable を ObjectQuery にキャストし、ToTraceString() を呼び出してエンティティ sql を取得しています。

IQueryable<SomeItem> query = context.SomeItem
            .Where(x => x.Timestamp >= start
                     && x.Timestamp <= end);

string eSql = (query as ObjectQuery<SomeItem>).ToTraceString();

文字列の「WHERE」セクションは次のようになります。

WHERE ([Extent1].[Timestamp] >= @p__linq__0) AND ([Extent1].[Timestamp] <= @p__linq__1)]"

これらのパラメーター プレースホルダーではなく、実際の DateTime 値が既に ESQL に取り込まれているような方法でトレース文字列を取得する方法はありますか?

Entity Sql をインターセプトし、生の EntityDataReader を使用して自分で結果を反復処理したいと考えています。

ありがとう。

4

1 に答える 1

2

これはESQLではないと思いますが、LinqクエリはESQLに変換されないため、クエリが変換された実際のSQLです。SQLインジェクション攻撃を防ぐために、パラメーターがSQLステートメントに埋め込まれることはありません。(SqlServerの)パラメーターがある場合ではなく、プレースホルダーのパラメーターを渡すことができるため、sp_executesqlが呼び出されます。

于 2012-05-04T02:42:58.037 に答える