小試LINQ to Oracle

上回針對Oracle使用LINQ做了一番評估,打算為Oracle相關專案導入LINQ預做暖身。無意發現除了Entity Framework外,還有另外的選擇---devart的LINQ to Oracle!

基於工作專案常偏向RAD性質,對我來說,LINQ to Oracle的輕巧優於EF的龐大嚴謹功能完整。而LINQ to Oracle雖然也找得到免費解決方案,但畢竟要用在工作上,產品有廠商支援撐場,總是比Open Source多幾分穩當,何苦為了幫公司省錢砸了飯碗。

devart的產品看來符合我的需要,因此決定著手試用逐步體驗。到devart的網站下載dotConnect for Oracle安裝後,Visual Studio 2008在新增項目時就會多出一些選項。我試做了第一個LINQ to ORACLE範例:

1.在專案裡新增一個Devart LINQ to SQL Model--HRDataContext.lqml。(相當於LINQ to SQL的dbml)

2.在Solution Explorer裡點兩下lqml檔案,並不會在Visual Studio裡開出編輯畫面,而是另外啟動Entity Developer for dotConnect。雖然沒有內嵌在VS2008 IDE內,但它仿效LINQ to SQL dbml的視覺化操作,透過拖拉就可對應資料表Schema建立Class。
如下圖,先 (1) 建立與Oracle DB的連線 (2) 選取資料表,拖拉到設計區,接著就出現跟LINQ to SQL一樣的設計畫面 (3) 記得要改一下Context Namespace,預設會跟lqml同名,而二者名稱相同容易混淆 (4) 不要忘記按一下儲存,設計結果才會回寫到VS2008專案裡。

3.回到VS2008,會發現Entity Developer for dotConnect會依設計結果產生多個額外檔案。

4.LINQ to Oracle的程式寫起來跟LINQ to SQL完全相同:

    class Program
    {
        static void Main(string[] args)
        {
            HRDataContext db = new HRDataContext();
            Player p = new Player()
            {
                Playerid = "Darkthread",
                Name = "黑暗執行緒",
                Email = "admin@darkthread.net"
            };
            db.Players.InsertOnSubmit(p);
            db.SubmitChanges();
            Console.WriteLine("Done!");
        }
    }

5.執行後用SQL lPlus查詢,資料真的被寫入DB了。

可以把LINQ to SQL的開發經驗直接移植到Oracle上,實在是件快意無比的事! 啾咪 ^.<

歡迎推文分享:
Published 18 October 2009 04:10 AM 由 Jeffrey
Filed under: ,
Views: 30,345



意見

# Ark said on 17 October, 2009 11:35 PM

再這邊提出一個疑問

EF繼承 ObjectContext

ObjectContext 實作 IDisposable

在MSDN的案例也都看到有用using 關鍵字打包

msdn.microsoft.com/.../bb738693.aspx

但是為何一堆外面看的範例都不管這個~直接當成Linq to Sql在用

是否conntion還是connpool自己會斷~還是timeout自己會斷

已經不需要管他了

搞不懂哩

# aliku said on 18 October, 2009 04:31 AM

小弟若沒用 using 包起來是會再呼叫 Disposed method 的.

若像MSDN範例用 using 的話就不用呼叫 Disposed k了.

若二者都沒用的話, 我想 connection 應該不會馬上斷, 一切就

照 GC 流程機制來跑了 ~~

若有錯再請大大指教...謝謝 !!

# Jeffrey said on 18 October, 2009 11:59 AM

Ark, aliku, 請參考我的實驗與推論: blog2.darkthread.net/.../linq-to-sql-connection-issue.aspx

# Ark said on 19 October, 2009 09:44 AM

痾~先謝謝 Jeffrey"棄兒不捨"的精神

但是我是懷疑EF ObjectContext ~不是DataContext

還是再觀望一下等EF V2正式現身

有沒可能SP,trigger,fulltextindex,backup,排程,eventlog....

變成拉個2下就都搞定的不死之身~天阿~DBA忽然間都失業了

這會變成謀殺

# cj said on 08 November, 2009 12:36 AM

呵呵, 我試 Devart 的結果是 bug 太多了, 看 Devart 的論壇也是 bug 滿天飛, 我有一個測試, 在 Devart 論壇還沒回應, 就是一個專案建立二個 Entity, 各自連結到不同的 Oracle user, 再將 userA.table 資料寫入 userB.table 中, 一定當.

# 麦舒 said on 10 November, 2009 04:22 AM

使用 ALinq 吧,绝对要好用很多,www.alinq.org

# 懒牛 said on 05 January, 2010 01:11 AM

devart,早就用过了,感觉还是ef好,虽然在执行效率上略低于linq,控制好savechanges,少new objectcontext就成了。

# kevin said on 04 July, 2012 10:22 PM

請問黑大

有什麼工具或套件可以查看Linq to Oracle 轉成SQL的敘述嗎?

# kevin said on 04 July, 2012 10:23 PM

請問黑大

有什麼工具或套件可以查看Linq to Oracle 轉成SQL的敘述嗎?

# Jeffrey said on 05 July, 2012 05:18 AM

to kevin, 試試DataContext.Log: www.devart.com/.../Devart.Data.Linq~Devart.Data.Linq.DataContext~Log.html

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<October 2009>
SunMonTueWedThuFriSat
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication