2012年1月5日 星期四

LINQPad + Oracle ODAC for Entity Framework

如何在 LINQPad 載入使用 Oracle ODAC for Entity Framework 開發的專案組件來執行查詢。

我在這個部落格的很多文章都會使用LINQPad來做操作說明,尤其是Entity Framework的相關文章,

例如:

Oracle ODAC 11.2 Release 4 (11.2.0.3.0) - Includes support for Entity Framework and LINQ

Oracle ODAC for Entity Framework 關連資料查詢的幾種不同方式

在文章中都主要是用LINQPad來操作以及說明,並且建議大家能夠使用LINQPad來做程式實作前的測試操作,但是很多人都反應說,他們不清楚要怎麼在LINQPad去加入已開發專案的專案組件然後使用,所以這一篇文章就來做個說明,讓大家了解如何在LINQPad中去加入已開發專案的專案組件然後進行各種的LINQ操作。

P.S.

而專案的實體資料模型的資料來源如果是使用MS SQL Server,也是同樣的操作模式,也是可以參考此篇文章的作法。



LINQPad

LINQPad - 好用到爆炸、.NET開發人員必備的好用工具

請參考以上的文章下載LINQPad(建議各位有預算的話就買個授權來使用,可以大大增加專案開發的效率)。

LINQPad 官網:http://www.linqpad.net/

 

準備好你的專案 - 以 Oracle ODAC for Entity Framework為例

沒有接觸過如何在 .NET 專案中使用 Oracle ODAC for Entity Framework的朋友,可以參考以下的幾篇文章,雖然專案的類型是 ASP.NET MVC,但加入實體資料模型(edmx) 的方式不管再ASP.NET WebForm或是WinForm都是一樣。

ASP.NET MVC + Oracle 11g XE + Entity Framework. Part 1

ASP.NET MVC + Oracle 11g XE + Entity Framework. Part 2

ASP.NET MVC + Oracle 11g XE + Entity Framework. Part 3

ASP.NET MVC + Oracle 11g XE + Entity Framework. Part 4

不過記得喔!下載Oracle ODAC(ODP.NET)時一定要下載最新版本的!

最新版本:ODAC 11.2 Release 4 (11.2.0.3.0) with Oracle Developer Tools for Visual Studio

 

經過上面的步驟,建立了一個 ASP.NET MVC專案,並且實體資料模型是用 Oracle ODAC for Entity Framework,

image

OracleNorthwind.edmx 內容:

image

這個時候不管你專案有沒有建立類別或是加入自己寫入的程式,都沒有關係,

重點是,你的專案在建置的時候一定要可以成功的!

而且要確認你的專案組件檔是有建立成功的,沒有建立成功是不會有專案組件檔的。

image

 

LINQPad 載入專案組件


Step.1

首先開啟LINQPad(注意你的專案與環境所使用的 .NET Framework版本,使用對應版本的 LINQPad)

SNAGHTML13723db

 

Step.2

點選「Add connection

SNAGHTML13d16c1

 

Step.3

點選「Add connection」後會顯示一個「Choose Data Context」的視窗,請選擇下方的「Use a typed data context from your own assembly」,接著再選擇「Entity Framework」項目,最後可以在「Entity Framework」項目上Double-Click 或是於選擇Entity Framework後點擊「Next」按鍵。

SNAGHTML13fd06e

 

Step.4

完成Step.3的Data Context選擇後最顯示「Entity Framework Custom Assembly Connection」的視窗,這裡請點選「Path to Custom Assembly」右方的「Browse」以選擇專案組件的路徑位置。

SNAGHTML143cb5f

「Choose Custom Assembly」選擇專案組件檔案並點選「開啟舊檔」

SNAGHTML1471d36

 

Step.5

開啟專案組件檔之後會顯示另一個視窗「Choose Custom Type」,這邊是讓我們要選擇要使用專案中的那一個Data Context,因為有的專案有可能會存在兩個以上的Data Context,那大部分的專案都是跟範例專案一樣是只有一個Data Context,所以這邊當然就是選擇這唯一的一個Custom Type,

SNAGHTML14b54ca

 

Step.6

在完成Step.5的步驟設定,回到「LINQPad Connection」視窗後,LINQPad就會解析專案組件檔的資料庫連接資訊,並於解析後在下方的「Provider」「Provider Name」「Connection String」載入資訊,

SNAGHTML14e15c7[4]

如果說你想要對資料庫連接字串做加密的動作,可以勾選「Encrypt connection string when saving」,載入資料庫的連接資訊後,我們可以點擊「Test」按鍵做資料庫的連接測試,

image

 

Step.7

上述 Step.6 的動作完成後,按下「OK」按鍵就會儲存並且在LINQPad中建立Connection,

image

如果覺得這個新加入的Connection不容易清楚辨識的話,可以在Connection項目上按右鍵,選擇「Rename」來重新命名,

image

重新命名

image

image

 

Step.8

完成了以上的七個步驟之後就已經完成了新增專案Connection的動作,就可以在LINQPad來做查詢了,在剛才新增加的「OracleNorthwind」Connection項目上按右鍵後點選「New Query

image

在LINQPad的右方就會新增加一個使用「OracleNorthwind」Connection的Query編輯區

SNAGHTML15eb754

我們可以在這個「C# Expression」Query編輯區去下LINQ的Query Expression,輸入LINQ查詢句後,可以點選上方的綠色執行按鍵或是直接按「F5」鍵就可以執行,並於執行完成後在下方顯示結果。

SNAGHTML166591e

在下方的Result區塊中,可以顯示多種的執行結果,除了一般的顯示查詢資料結果外,另外可以顯示:lambda語法、轉換SQL Script、IL。

 

顯示Lambda語法:

image

顯示 IL:

image

顯示SQL Script:

LINQPad目前的版本對於 Oracle ODAC for Entity Framework尚未完全支援,所以「SQL」這邊是無法顯示轉換的SQL指令,但是使用MS SQL Server 的實體資料模型則是可以顯示轉換後的SQL指令。

image

如果是使用MS SQL Server的實體資料模型的專案…

SNAGHTML17144c4

 

以上就是在LINQPad中載入專案組件並執行 LINQ Query Expression 的步驟。

 



Language 選擇使用「C# Statement」

在Query編輯區將Language改選用「C# Statement」,這樣一來就可以在編輯區中執行LINQ 以及 C#語法,最後如果要顯示資料的話,必須使用「Dump()」,不然是不會顯示整個執行的結果。

image

 

Language 選擇使用「C# Program」

上面所寫的程式不去變動然後將「Language」選項改選擇「C# Program」,會以Program的方式把程式區段給包覆起來,

image

或者說我們想要將某些程式區段給抽出,也可以用「C# Program」的方式來做測試,

image

 

Language 選擇使用「SQL」

Language改使用 SQL 選項,不論資料庫是使用MS SQL Server 或是 Oracle,都可以輸入 SQL Script做查詢,

image

 

Language 的選項

除了使用C#語法外,也有支援VB語法以及F#語法。

image



顯示關連性

如果在資料庫有設定好各個Table的關聯性,或者在EDMX中有手動設定各個Entity的關聯性,那麼在Connection中就會顯示:

image

而在下Query指令時也會在IntelliSence中顯示(不過這功能只有付費的版本才會有,免費版本則沒有提供

image

 

查詢結果輸出

在 LINQPad 中也可以直接把查詢的結果輸出為檔案,支援輸出的檔案格式有:

image




結語:

有關LINQ載入使用Entity Framework開發的專案組件的簡單說明就到此,而LINQPad的操作當然不止於上面所說的那些而已,還有很多功能與使用方法就留待各位有興趣的人逐一發掘,希望透過本篇文章的簡單說明幫助各位去使用LINQ,並且輔助專案有使用Entity Framework開發的效率,在設計階段時,要測試LINQ 查詢句是否正確時不必在Visual Studio 去執行整個專案,只要將LINQ查詢句複製並貼上LINQPad然後再做一些些的修改後就可以馬上執行並得到結果,這樣子的開發方式既方便又快速,所以我一直都在向周遭的朋友推薦使用LINQPad,而大部分的回應都是用得相當滿意。

 

參考連結:

LINQPad - Using LINQPad with Entity Framework

http://www.linqpad.net/EntityFramework.aspx

LINQPad + EF Video

http://oreilly.com/pub/e/1295

SCIP.be - Stefan Cruyberghs’s blog:.NET - New connection providers in LINQPad

http://www.scip.be/index.php?Page=ArticlesNET29


Simple Thoughts on Everything - Bibby:用 LinqPad 來使用 Entity Framework

http://bibby.be/2010/07/linqpad-entity-framework.html

 

以上

沒有留言:

張貼留言

提醒

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