2012-05-04 41 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將被調用,因爲它允許傳遞佔位符的參數。

相關問題