可以使用包含参数值的ToTraceString()来获取ESQL吗?

时间:2012-05-04 00:59:32

标签: c# .net linq entity-framework entity-framework-4

我正在向ObjectQuery投射IQueryable,然后调用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自行迭代结果。

感谢。

1 个答案:

答案 0 :(得分:2)

我认为这不是ESQL,而是查询转换为实际的SQL,因为Linq查询未转换为ESQL。参数永远不会嵌入SQL语句中以防止Sql注入攻击。而不是如果有参数(对于SqlServer),将调用sp_executesql,因为它允许传递占位符的参数。