您會在新項目中使用 LINQ to SQL 嗎?
我一直在研究將什麼數據層用於我正在設計的新的基於 Web 的項目,並且我非常熱衷於將 LINQ 與 SQL 結合起來。它明顯的簡單性、靈活性和設計器支持確實很有吸引力,並且與 SQL Server 的隱式連接很好。
然而,最近宣布 LINQ to SQL 將退居到實體框架之後,因為它已被傳遞給 ADO.NET 團隊 ( http://blogs.msdn.com/adonet/archive/2008/10 /29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx)。當然,它會在未來得到支持,但不太可能看到更多的開發工作。
考慮到這一點,您會推薦我在我的項目中使用這項技術,還是值得選擇替代 ORM(nHibernate?)或手動編寫通用 DAL?
該項目本身是基於 ASP.NET 和 SQL Server 2005/2008 的,並且可能會使用 MVC,即使它仍處於測試階段。這是一個個人項目,數據庫不會過於復雜,主要用作看.NET未來技術的原型。不過,我會將未來的項目建立在我從這個項目中學到的東西上,所以我做出的選擇會影響到更大的解決方案。
是的,我意識到微軟明天可能會推出全新的數據訪問技術!;)
好吧,這裡的答案大部分已經涵蓋了(也有一些有趣的觀點),但無論如何我還是要再說一遍……
LINQ to SQL (L2S) 非常通用,但從我的角度來看,它感覺有點太基礎了。在大多數情況下,它在做簡單的事情方面做得很好,但只要你要求更多一點,它就會變得昂貴。這根本不是一件壞事。我實際上認為 LINQ to SQL 實際上很好地補充了實體框架。
以使用 LinqDataSource 的自動分頁為例。如果您不指定 Order By/Group By 那麼它是非常經濟的。將排序或分組放入組合中,您開始獲得性能飆升(變得非常健談)。然後,您幾乎必須編寫自己的分頁實現(我承認這並不難)。
我將是第一個承認 L2S 在生成的 T-SQL 的質量方面優於實體框架的人(我應該,因為 L2S 是專門為查詢 SQL Server 而建構的)以及在概念和語義上,大部分 LINQ to SQL 與 EF 類似,但你遇到的問題是擴展需求和考慮更複雜的實現要求。
如果我要從頭開始並選擇投入個人開發時間,我會選擇實體框架。有趣的是,我目前正在開發一個使用 L2S 的項目,它旨在擴展和處理重負載,但是當我們遇到一些更具“創造性”的要求時,我們經常被迫擴展 SQL Metal (例如多對多關係)。
所以..簡而言之..我會這樣處理:
a) 學習 LINQ to SQL 作為介紹(微軟的 ORM 模式和技術)。它讓您熟悉與實體框架共享的大部分基礎知識,並體驗 LINQ 樣式查詢(如果您有後天的體驗) T-SQL 的背景)
b)一旦您掌握了 LINQ to SQL,我建議您跳到實體框架以了解其他好處(eSQL 等)
c) 在兩者中實施概念驗證項目並比較結果。
選擇 NHibernate。它將作為一個概念或實際的 ORM 存在一段時間。因此,學習兩者都會很有用。