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,而是查询被翻译成的实际 SQL,因为 Linq 查询没有被翻译成 ESQL。SQL 语句中永远不会嵌入参数,以防止 Sql 注入攻击。而不是如果有参数(对于 SqlServer),将调用 sp_executesql,因为它允许为占位符传递参数。

于 2012-05-04T02:42:58.037 回答