2010-07-26 69 views
3

在工作中,我們只是從VS2005升級到2010年。對於這一點,我們只使用存儲過程(我猜是出於習慣比什麼都重要的)。我一直在玩Linq(非常簡單的教程 - 沒什麼大不了)。作爲我對ORM的第一次實際體驗,我喜歡它。的LINQ VS MS企業庫DAAB

此外,我只是最近才熟悉企業庫塊。一般來說,項目是使用ORM還是DAAB,還是項目可能會使用這兩個項目?這取決於情況還是僅僅偏好?有一種方法比另一種更好嗎?

謝謝。

回答

1

一個或另一個......我沒用過DAAB一段時間,但是的LINQ to SQL或ADO.NET EF使用一個設計師來生成代碼類,代表了數據庫,其中DAAB是基於ADO建.NET(DataSet's等)。我喜歡LINQ,易於使用,你可以使用存儲過程來獲取你的數據,或者構造一個LINQ查詢來提取數據(代碼LINQ查詢被轉換爲數據庫查詢)。

所以我比較喜歡LINQ;如果你使用DAAB,我建議使用代碼生成工具。

HTH。

1

的DAAB而像Linq的現代奧姆斯更多的是關於從數據庫模式生成的強類型的實體密切相關的數據庫訪問(思數據集)老式的。

如果你需要數據庫中立性(IIRC它非常適合用於不同類型的數據庫管理系統),並且你希望避免那些依賴編譯時魔術的工具,我只會建議使用DAAB。

奧姆斯通常是在易用性和工具支持的形式提供價值相當不錯。然而,他們經常碰到「對象 - 關係阻抗不匹配」的頭,這些不匹配的實體看起來和表面上像標準對象一樣,但對它們的使用有着深遠的要求,因爲它們抽象了一個不是真正與面向對象計算兼容。你的代碼必須「知道」如何使用它們,否則就會面臨在編譯時無法捕捉的陷阱。

就我個人而言,我會避開DAAB。除了一些閃亮的例子(統一!)EL是相當重量級,並需要相當數量的工作來理解和正確使用。它通常是一個用鑿子工作的履帶式手提鑽。除了大多數ORM都非常好,缺點不足。 Linq to Sql是穩固的,EF4正在實現。還有一些開源替代品,如nHibernate,也爲學習曲線提供了很好的價值。

如果我要開始一個新的項目,明天,我會用已被最近發佈了EF4 code-first bits。我認爲這主要是因爲我是一個懲罰的貪婪者。 EF4一直在我的屁股疼......

2

我們在完全相同的點上,已經使用DAAB從2.0到4.1。 FWIW這是我們的想法(我們真的是臨ORM):

有關之間的平衡:

  • 生產率改進的代碼生成能力的ORM給了(尤其是通過不必手工編碼存儲過程和實體)
  • LINQ給出的改進的靈活性wrtEager和Lazy Loading,只提取所需的列(查詢範圍窄,可以更好地匹配NC和覆蓋索引等)
  • 據我們所知,LINQ使用參數化查詢,因此性能爲w.r.t.計劃緩存並且不容易受到SQL注入攻擊http://msdn.microsoft.com/en-us/library/bb386929.aspx

然而,不利的一面

  • 損失控制權的實體 - 它們不一定是POCO(對於LINQ2SQL),雖然EF4允許您自己的POCO,並且延遲加載仍然可以通過代理實現。
  • 缺乏控制/決定在可能對數據庫執行,這意味着對數據庫是覆蓋測試查詢是一個潛在的問題(而這是比較簡單的,以確定一個存儲過程索引策略)
  • 除非您小心,否則更新實體圖可能會產生意想不到的「深度」後果。 LINQ2SQL真的可以做一個「SavesWith」比喻爲預先加載「LoadsWith」

綜上所述,我們很高興能與我們的表/實體的約80%的ORM,但隨後會看定製工作真正敏感的,性能特定的東西。

HTH