LINQ Insight - 整合Visual Studio的LINQ測試利器
LINQ Insight是一套有別於LINQPad的產品,LINQPad雖然一開始是以LINQ為出發點,但發展到最後已經算是一個簡化版的編輯器環境。而LINQ Insight是一套專注在Visual Studio與LINQ的產品,它與LINQPad有幾項差異:
- LINQ Insight與Visual Studio 2010/2012/2013整合。(LINQPad是獨立執行)
- LINQ Insight的一大特色是,直接在Visual Studio編輯器裡執行你所撰寫好的LINQ(不用啟動專案哦)並取回結果分析。
- LINQ Insight在有LINQ含參數的部分,也非常容易測試,不用特別進行事前準備。(後面會有範例)
- LINQ Insight會自動偵測目前專案裡的連線字串(ADO.NET / EDMX)並使用。(LINQ需額外設置)
- LINQ Insight支援更多元的LINQ Provider。
- LINQ Insight特有ORM Profiler
以下以一個ASP.NET MVC 5專案與Northwind資料庫產生的ProductsController來說明各項特性。
SQLLocalDB不支援
就筆者目前測試的結果,LINQ Insight在使用SqlLocalDB的情況無法使用(LINQPad可以)。以下測試是連線至SQL Server Express進行測試。
目前最新版已經支援SqlLocalDb,實用性大增。:D
整合Visual Studio展示
當我們下載LINQ Insight,在Visual Studio的編輯區按左鍵,可以看到新增了「Run LINQ Query」
讓我們將游標移至某一行LINQ運算式並執行Run LINQ Query:
他會立即分析LINQ運算試,在這裡LINQ Insight發現兩種不同的執的結果,會詢問我們想要測試那一種語法:
由頁籤切換「SQL」可以查看產生的SQL語法:
由頁籤切換「LINQ」可以查看執行的LINQ語法:
這個「LINQ」頁籤不只可以查詢執行的LINQ語法,它也可以直接執行開發者所輸入的語法,但比較可惜的是,此處沒有IntelliSense的功能。
回到「Result」頁籤,它還有個好用的分組功能,直接把你想分組的欄位往上拉中間灰色欄位:
LINQ互動視窗就會任拉選的欄位進行分組呈現。
最後視窗上的「Filter」是進行關鍵字搜尋,它會搜尋出所有符合關鍵字的欄位並且進行醒目提示。
如果你有注意上面的圖示的話,你可以發現,如果欄位是關連資料(FK),那麼LINQ Insight不會直接呈現資料,而且讓我們可以使用下接選單的方式來呈現關連資料:
在「Results」呈現的資料,我們某一欄位點擊兩下可以進行資料修改。如果剛好是日期欄位,還會貼心跳出日曆讓你選擇:(以下是執行db.Orders)
以上都是簡單的測試。我們經常需要傳入參數值並查看結果,這部分LINQ Insight大大方便於LINQPad:
// GET: Products Paging
public IEnumerable Paging(int index, int size)
{
int skipSize = index*size;
var result = (from p in db.Products
orderby p.ProductName
select p).Skip(skipSize).Take(size);
return result;
}
這是一段LINQ的分頁程式,我們想要測試這段LINQ程式碼,點選Run LINQ Query:
LINQ Insight會聰明的分析這段LINQ有兩個參數,並顯示「Edit Query Parameters」視窗要求開發者輸入,然後執行LINQ程式碼。之後我們也很方便由介面上去修改參數值去進行測試:
LINQ Profiler
如果你的應用程式與資料庫之間是有使用ORM Solution,例如,Entity Framework、HNibernate、LinqConnect或Linq to SQL,那麼LINQ Insight還提供了類似SQL Server Profile的功能,一樣是整合於Viusal Studio之內,讓我們方便分析LINQ的執行過程。預設LINQ Profiler不會出現,由「檢視」→「其他視窗」→「LINQ Profiler」,點選「黑色三角型」啟用LINQ Profiler。
不過筆者一開始就鬼擋牆似的,專案怎麼跑,LINQ Profiler就只是一片空白。最後發現,原來要開啟…
我的IntelliTrace不明原因被取消勾選(OzCode?),再來還有個好玩的,如果你勾選了第二個選項「IntelliTrace事件和呼叫資訊」,那麼LINQ Profiler會一樣是一片空白。而第一次啟動後得到一個:
我很乖,重新啟動Visual Studio之後,終於:
由鬼打牆的設置我合理猜測,LINQ Profiler其實是一個IntelliTrace的整理器,只是比起IntelliTrace,LINQ Profilter介面美,資訊的整理與查詢都方便許多。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。