2014年6月18日 星期三

LINQ 工具 - devart LINQ Insight

LINQ Insight 這個工具在 2012 年發布之後就已經有在關注,只不過一開始的功能並不是很好用,而且沒有讓我感覺到能帶給我在開發上有任何太大的幫助,所以最後就沒有用在開發上。

不久前閒晃到 devart 網站,我一直有使用 SQL Complete 與 Code Compare 這兩個工具,所以有時會上去下載新版的更新檔案,然後就發現到 LINQ Insight 已經更新到 3.2 版,而且介面與功能有了一些改變,於是就下載試用版來試試看,在試用過之後,雖然 LINQ Insight 還是有部份功能無法達成的情況,但整體來說是個不錯的輔助開發工具,這邊就向大家做個簡單的介紹。

 


LINQ Insight

http://www.devart.com/linqinsight/

image

LINQ Insight 所強調的是可以整合在 Visual Studio 內,並且直接在專案中就可以使用,不需要另外的設定,而且還有提供追蹤 ORM 資料存取的功能。

另外 LINQ Insight 還有做個與 LINQPad 的比較表,比較兩個產品之間的不同,有興趣的朋友可以去做個了解,

http://www.devart.com/linqinsight/linqpad-comparison.html

私心認為,我還是喜歡使用 LINQPad,我是認為這兩個工具雖然有其功能相似與重疊的地方,但是使用情境與使用方式還是有很大的不同,我很難去將這兩個工具擺在一起做比較,而且在真正複雜的專案開發裡,LINQ Insight 則是無用武之地(這個最後會講到)。

LINQ Insight 是個要花錢買的工具,而且費用不算便宜,一份授權需要花費美金 149.95 元,不過安裝使用的前 30 天是有提供完整的功能,但是過了 30 天之後就會從標準版變為 Express 版,其中兩個主要的功能就無法使用「Displaying returned data」與「Profiling ORM calls」,可以從以下的連結進去了解兩個版本的差異。

http://www.devart.com/linqinsight/editions.html

雖然工具需要花錢買,不過 Devart 有提供 High Five Get Bonus 的活動,就是可以透過在臉書分享、按讚或者是透過其他社群服務的分享來取得一定的折扣優惠,甚至於如果你有部落格,而且是持續經營一對時間(至少要超過六個月以上),而且每個月都有發文的情況下,可以在使用過試用版之後在部落格發布一篇超過 1000 字的文章,然後把文章連結回報給 Devart,就有機會取得一份授權。

http://www.devart.com/highfive/highfive-linqinsight.html

image

 

Debug LINQ

http://www.devart.com/linqinsight/debug-linq.html

在上面的功能說明網頁中,列出了多種 LINQ Insight 所提供的功能,想要了解的朋友可以前往連結查看,下面我還是擷取我實際操作的情況讓大家可以快速了解。

我已經建立好一個 ASP.NET MVC 5 專案,並且使用 EF6 來建立 Model,然後建立一個 DemoController 與 Index action 方法並實作以下的程式內容,

image

在有安裝 LINQ Insight 的情況下,在 Index action 方法的範圍內先按下滑鼠右鍵,然後選單出現後就點選「Run LINQ Query」項目,

image

因為我的 LINQ 查詢式是需要查詢關鍵字,所以會出現一個視窗詢問要輸入什麼變數值(只有第一次執行的時候才會詢問,之後可以再自行修改變數值),

image

執行結果會在 LINQ Interactive 視窗裡顯示,

image

LINQ Interactive 視窗還可以查看 LINQ 查詢式的內容,如果你是使用 Method Syntax 方式編寫,在 LINQ Interactive 則是會以 Query Syntax 來呈現,

image

在 SQL 頁籤裡則是可以看到當次查詢的 SQL Command 內容

image

點選 LINQ Interactive 左邊數過來的第二個圖示,則是可以編輯變數內容,

image

image

編輯完成變數值之後就會馬上執行並且顯示結果

image

對於查詢的結果還可以進行過濾

image

如果有類別有關聯的話,可以在查詢結果裡顯示

image

可以查詢結果的某個欄位進行 Group 處理

image

image

 

Profile LINQ

這個功能算是一個亮點,LINQ Profiler 可以在偵錯過程時進行追蹤 ORM 的執行過程,包含執行的 SQL Command 以及方法的呼叫,LINQ Profiler 可以對 Entity Framework, LINQ to SQL, NHibernate 與 LinqConnect 進行追蹤,

在進行偵錯之前,先開啟 LINQ Profiler

image

然後點選 start profile session

image

然後執行 Visual Studio 的偵錯,如果進入偵錯模式後 LINQ Profiler 視窗不見了,再開啟就可以,當偵錯模式進入到有執行 EF 的地方,就會在 LINQ Profiler 裡看到追蹤的內容,

image

在 LINQ Profiler 右下視窗裡,在「ORM Events」檢視模式裡可以分別看到 LINQ, SQL, Data Access, Call Stack, Info , Error 等內容

image

Data Access

image

Call Stack

image

而如果是使用「Data Access Events」檢視模式又可以看到不同的檢視內容

image

image

image

在 LINQ Profiler 裡有不同的檢視方式與模式,各位可以自己摸索。

 

Something Else …

看起來 LINQ Insight 是個相當方便的工具,可以讓我們在專案有使用 ORM solution 的情況下就能夠追蹤執行的過程與內容,但是呢…… 這是在單純的專案架構下的情況,如果你的專案是已經是使用分層而且使用介面、IoC 的時候,那麼 LINQ Insight 就無用之地,不過我是這麼想,當你的專案已經進入到這樣的複雜架構,那麼就沒有必要去使用 LINQ Insight 做追蹤的工作,而是會用其他的解決方式。

如果你的專案只是單純的分層(例如把 Model 從 Web 專案裡抽出來獨立為單一的專案),那麼是不影響 LINQ Insight 的功能,不管是 LINQ Interactive 還是 LINQ Profiler 都是能夠正常運作的。

總的來說,LINQ Insight 是個不錯的工具,當你的專案架構比較單純的情況下,是可以輔助我們的開發工作。

 


在介紹這個開發輔助工具之後,一定要再三地強調一下「LINQ」,

LINQ 並不是用來取代 T-SQL,LINQ 的作用也不限於對資料庫資料的存取

從 LINQ 出來之後,總是被許多開發者誤解,最大的誤解就是覺得 LINQ 是用來取代 T-SQL 的,而且會狹隘的認為 LINQ 是用來操作資料庫的資料存取,這樣的誤解就真的把 LINQ 給想得太小也太偏頗了,常常會看到有人會說「LINQ 整體執行的效能太慢了,還不如直接執行 T-SQL 來得快」「LINQ 太麻煩了,語法太複雜了,所以不想去學」……

如果還抱持這樣想法的朋友,看來你不需要用到 LINQ 也應該可以過得很好,只不過無法體會到 LINQ 於程式開發所帶來好的改變與影響。

 

延伸閱讀

KingKong Bruce記事: LINQ Insight - 整合Visual Studio的LINQ分析工具

 

以上

3 則留言:

  1. 其實我是會改用 Code Compare,功能其實差不多,WinMerge 是比較輕巧.

    回覆刪除
  2. 這東西是有用過
    早期版本真的不覺得怎麼好(直覺)用
    而且老實說需要用到的時機真心不多

    反而LINQPad常常被我拿來寫小程式用
    诶...這樣好像都沒認真拿來用在LINQ上阿XDD

    回覆刪除

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。