2009-11-20 81 views
3

這可能都有點主觀的:的LINQ to SQL,的executeQuery等

我們的組織作出了採取的LINQ to SQL作爲我們的主要數據訪問方法的強烈企圖,並在大多數情況下這工作得很好。 (讓我們將EF留出討論)

我們的一些開發人員發現LINQ很困難,並且通過ExecuteQuery遷移回傳統的原始SQL。我們還在一些應用程序中利用OpenQuery來訪問遠程服務器上的數據。 OpenQuery不能通過LINQ執行,並且總是會通過ExecuteQuery執行代碼。作爲一個組織,我們也決定放棄存儲過程,並再次依靠LINQ。

那麼,說一些查詢太複雜以至於無法用LINQ執行,這是否公平?我們希望避免數據庫中的業務邏輯,所以當你不能使用LINQ時,我們會去哪裏? ExecuteQuery作爲ADO.NET Command.Execute()的更好選擇的一般感覺是什麼?我認爲可以對存儲過程進行爭論,或者至少避免它們是一個有效的選擇,但是如何使用LINQ作爲替代查詢Views?

關於何處着陸飛機的想法?別人在做什麼?

謝謝,

回答

2

使用合適的工具進行正確的工作。 Linq-to-SQL涵蓋了您在日常業務應用中每天需要完成的大部分工作,因此在那裏使用它。開發人員會習慣它,也可能會開始喜歡它 - 它真的非常強大和有用!

但是 - 有確定的情況下,直接的SQL查詢將更容易使用 - 這很好,沒有損害 - 這是ExecuteQuery的用途。如果您有許多CTE和各種類型的複雜聯接 - 您可能可以在Linq-to-SQL中表達,但如果您已經擁有T-SQL語句,則可能會花費太多精力和麻煩那有效......

需要時間去適應新的做事方式 - 給它一些時間!我相信你的大部分開發人員都會逐步遷移到LINQ。鼓勵他們,給他們提示技巧,幫助他們,你可以在哪裏。但也要接受,在相同的情況下,棘手的SQL語句可能太難以在LINQ中重寫(如果您已經擁有它們並且它們已經在工作 - 只是繼續使用它們)。

1

那麼,說一些查詢太複雜以至於無法用LINQ執行 是否公平?

我會說在大多數情況下沒有。畢竟,LINQ to SQL只是一個對象關係映射器。如果使用LINQ to SQL查詢很困難,那麼對於普通SQL來說,這將會是相同或更難的;再加上你必須手工管理所有數據庫到對象的映射。無論如何,作爲marc_s點,你有ExecuteQuery例外情況。

自從它發佈以來(從簡單的數據庫到複雜的數據庫),我在所有新項目中都使用了LINQ to SQL,並在100%的情況下簡化了我的工作,並允許我編寫更易讀和可維護的代碼。

我們的一些開發人員發現LINQ 困難和通過的executeQuery遷移回 傳統原始的SQL。

我覺得很難相信,除非他們害怕學習新的東西。如果他們能夠通過閱讀書籍,博客或技術文章,或者通過課程或指導來設法在LINQ中成立自己,那麼肯定他們會發現這是值得的。

3

我還沒有找到一個如此「複雜」的查詢,它無法在Linq-to-Sql中表達。事實上,我發現Linq-to-Sql代碼比一些傳統的SQL語句更容易閱讀。這就是說,如果這是一個複雜的READ命令,那麼我建議你把它放到VIEW中並通過LINQ訪問視圖。您可以更多地控制連接/並確保爲最佳效率定義底層SQL。

此外,您可以調用Linq-To-Sql中的存儲過程和/或函數。和你在傳統SQL過程中創建存儲過程的原因相同,這就是爲什麼你會在Linq-To-Sql中這樣做。讓我們重申:沒有任何東西阻止您從Linq到SQL運行存儲過程。當我需要影響一些記錄時(例如,對記錄進行批量更改),我這樣做。