2012-05-04 20 views
0

我铸造一个IQueryable到的ObjectQuery,然后调用ToTraceString()来获取实体SQL:使用包含参数值的ToTraceString()可以获得ESQL吗?

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来自行迭代结果。

谢谢。

回答

2

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

相关问题