採用 Entity Framework 技術來開發應用程式有一個經常會遇到的問題,就是不知道到底 Entity Framework 幫我們產生了什麼 T-SQL 到資料庫,雖然 SQL Server 資料庫有 SQL Server Profiler 工具可以分析追蹤應用程式實際查詢的 T-SQL 語法,不過在開發階段用這種方式追蹤程式碼還是有點麻煩的,今天要介紹的 Entity Visualizer 擴充套件就非常適合用來查詢這些透 Entity Framework 產生的 T-SQL 語法,相信對開發偵錯工作可以帶來不小的幫助。
你可以從 Visual Studio 2010 的擴充管理員進行套件安裝,開啟後點選 線上圖庫 分類,然後在右上角的搜尋文字框輸入 Entity Visualizer 就可以查到 Entity Visualizer 項目。

請注意:這個 Entity Visualizer 關鍵字會搜尋出兩個非常相似的擴充套件分別為 Entity Visualizer 與 Entity Visualizers,其用途不同,請不要下載錯了,要下載 Entity Visualizer 才對喔!
按下 [下載] 按鈕後不會自動安裝,而是會開啟 Entity Visualizer 的專案網站,你必須手動下載該 Visualizer 的 DLL 檔案:http://entityvisualizer.codeplex.com/releases

接著將下載的 DLL 手動複製到 [我的文件\Visual Studio 2010\Visualizers] 目錄下:

檔案複製進去後,還有一個非常重要的步驟要設定,否則 Visual Studio 2010 無法正常使用這個 Visualizer 擴充。由於該 DLL 檔案是透過網路下載的,預設該 DLL 會被封鎖,以致於 .NET Framework 無法正常執行該 DLL 的各種功能,使用時便會遇到如下圖的錯誤:
![您的應用程式中的元件發生未處理的例外狀況。如果您按一下 [繼續],應用程式會忽略此錯誤並嘗試繼續。
無法載入檔案或組件 'file:///C:\Users\will\Documents\Visual Studio 2010\Visualizers\EntityFrameworkVisualizer.dll' 或其相依性的其中之一。 不支援作業。 (發生例外狀況於 HRESULT: 0x80131515)。](/image.axd?picture=SNAGHTML91cd90f.png)
解決的方式就是透過檔案總管先開啟該 DLL 的內容視窗,並點擊 [解除封鎖] 後再按下 [確定] 即可!

這時 Visual Studio 2010 不需要重新啟動,你現在就能直接開啟有使用到 Entity Framework 的專案,設定中斷點之後進入偵錯模式後即可查詢特定 Entity Framework 相關物件所產生的 T-SQL 為何,以下是幾個使用時的圖示說明:
中斷點下在 SaveChanges() 方法上,在執行之前可以察看 context 物件到底會產生什麼 T-SQL:

點開後即可看到即將被執行的所有 T-SQL,非常的清楚,而且可以 Copy 進剪貼簿:

以下是一個查詢資料的範例:

其 ObjectQuery 物件一樣可以透過 Entity Visualizer 幫我們產生實際要進資料庫查詢的 T-SQL 指令

在開發階段能取得這些資訊有助於你對這些 LINQ to Entities 的語法進行調校,其實還蠻不錯的!
相關連結