我正在向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自行迭代结果。
感谢。
答案 0 :(得分:2)
我认为这不是ESQL,而是查询转换为实际的SQL,因为Linq查询未转换为ESQL。参数永远不会嵌入SQL语句中以防止Sql注入攻击。而不是如果有参数(对于SqlServer),将调用sp_executesql,因为它允许传递占位符的参数。