小試LINQ to Oracle
10 |
上回針對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上,實在是件快意無比的事! 啾咪 ^.<
Comments
# by Ark
再這邊提出一個疑問 EF繼承 ObjectContext ObjectContext 實作 IDisposable 在MSDN的案例也都看到有用using 關鍵字打包 http://msdn.microsoft.com/zh-tw/library/bb738693.aspx 但是為何一堆外面看的範例都不管這個~直接當成Linq to Sql在用 是否conntion還是connpool自己會斷~還是timeout自己會斷 已經不需要管他了 搞不懂哩
# by aliku
小弟若沒用 using 包起來是會再呼叫 Disposed method 的. 若像MSDN範例用 using 的話就不用呼叫 Disposed k了. 若二者都沒用的話, 我想 connection 應該不會馬上斷, 一切就 照 GC 流程機制來跑了 ~~ 若有錯再請大大指教...謝謝 !!
# by Jeffrey
Ark, aliku, 請參考我的實驗與推論: http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/10/19/linq-to-sql-connection-issue.aspx
# by Ark
痾~先謝謝 Jeffrey"棄兒不捨"的精神 但是我是懷疑EF ObjectContext ~不是DataContext 還是再觀望一下等EF V2正式現身 有沒可能SP,trigger,fulltextindex,backup,排程,eventlog.... 變成拉個2下就都搞定的不死之身~天阿~DBA忽然間都失業了 這會變成謀殺
# by cj
呵呵, 我試 Devart 的結果是 bug 太多了, 看 Devart 的論壇也是 bug 滿天飛, 我有一個測試, 在 Devart 論壇還沒回應, 就是一個專案建立二個 Entity, 各自連結到不同的 Oracle user, 再將 userA.table 資料寫入 userB.table 中, 一定當.
# by 麦舒
使用 ALinq 吧,绝对要好用很多,www.alinq.org
# by 懒牛
devart,早就用过了,感觉还是ef好,虽然在执行效率上略低于linq,控制好savechanges,少new objectcontext就成了。
# by kevin
請問黑大 有什麼工具或套件可以查看Linq to Oracle 轉成SQL的敘述嗎?
# by kevin
請問黑大 有什麼工具或套件可以查看Linq to Oracle 轉成SQL的敘述嗎?
# by Jeffrey
to kevin, 試試DataContext.Log: http://www.devart.com/linqconnect/docs/Devart.Data.Linq~Devart.Data.Linq.DataContext~Log.html