﻿# 介紹好用 Visual Studio 2010 擴充套件：Entity Visualizer

採用 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** 項目。

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ffd5b6e82d56fd76005e-SNAGHTML90e64d9_thumb.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/dc57832c6a5987d460c6-SNAGHTML90e64d9.png)

請注意：這個 **Entity Visualizer** 關鍵字會搜尋出兩個非常相似的擴充套件分別為 **Entity Visualizer 與 **Entity Visualizers****，其用途不同，請不要下載錯了，要下載 **Entity Visualizer** 才對喔！

按下 \[下載\] 按鈕後不會自動安裝，而是會開啟 **Entity Visualizer** 的專案網站，你必須手動下載該 Visualizer 的 DLL 檔案：[https://github.com/kpol/EntityVisualizer/releases](https://github.com/kpol/EntityVisualizer/releases)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/66cb91ff0282a7dac97c-image_958.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6d1e965c9f36868037b0-image_959.png)

檔案複製進去後，還有一個非常重要的步驟要設定，否則 Visual Studio 2010 無法正常使用這個 Visualizer 擴充。由於該 DLL 檔案是透過網路下載的，預設該 DLL 會被封鎖，以致於 .NET Framework 無法正常執行該 DLL 的各種功能，使用時便會遇到如下圖的錯誤：

![您的應用程式中的元件發生未處理的例外狀況。如果您按一下 \[繼續\]，應用程式會忽略此錯誤並嘗試繼續。
無法載入檔案或組件 'file:///C:\\Users\\will\\Documents\\Visual Studio 2010\\Visualizers\\EntityFrameworkVisualizer.dll' 或其相依性的其中之一。 不支援作業。 (發生例外狀況於 HRESULT: 0x80131515)。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e38a6c0a147dfbfe03c9-SNAGHTML91cd90f.png)

解決的方式就是透過檔案總管先開啟該 DLL 的內容視窗，並點擊 \[**解除封鎖**\] 後再按下 \[**確定**\] 即可！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/34416b4a5dfa39923265-SNAGHTML91ae7bf.png)

這時 Visual Studio 2010 不需要重新啟動，你現在就能直接開啟有使用到 Entity Framework 的專案，設定中斷點之後進入偵錯模式後即可查詢特定 Entity Framework 相關物件所產生的 T-SQL 為何，以下是幾個使用時的圖示說明：

中斷點下在 SaveChanges() 方法上，在執行之前可以察看 context 物件到底會產生什麼 T-SQL：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/8ffa4a2f7c06634c6dc3-image_960.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4c7d838638183105b29d-SNAGHTML9274568.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/bd029a6f0e4b688386c5-image_961.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/55a4b5fae7511cbbf6dd-SNAGHTML92d363c.png)

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

**相關連結**

-   [Entity Visualizer](https://github.com/kpol/EntityVisualizer) ( CodePlex )
-   [Entity Visualizer](http://visualstudiogallery.msdn.microsoft.com/d41733dd-eb80-4105-946d-362d3709c8eb) ( Visual Studio Gallery )
-   [Visualizers](http://msdn.microsoft.com/en-us/library/zayyhzts.aspx) / [視覺化檢視](http://msdn.microsoft.com/zh-tw/library/zayyhzts.aspx)  ( MSDN )
-   [HOW TO：安裝視覺化檢視](http://msdn.microsoft.com/zh-tw/library/sb2yca43.aspx)
-   [HOW TO：使用視覺化檢視](http://msdn.microsoft.com/zh-tw/library/xdakzs26.aspx)
-   [Entity Visualizers](https://web.archive.org/web/20171223192605/http://entityvisualizers.codeplex.com/) ( CodePlex ) - 可用來查詢 entity 物件的變更狀態。
