Dot-Net

.net 實體框架與 LinqToSql 相比如何?

  • March 21, 2018

我聽說實體框架是矯枉過正,或者與 LinqToSql 相比,它很難學習。

我想知道以什麼方式?我使用了 LinqToSql 並喜歡它。所以,我正在嘗試 EF,而對於我正在做的事情,它們看起來幾乎完全相同。命名空間和方法名稱不同,但到目前為止,我沒有看到任何使 EF 比 LinqToSql 更難的東西。

我敢肯定,如果我開始做更複雜的事情,它會變得更複雜。但話又說回來,我可能根本無法用 LinqToSql 做同樣的事情,所以我認為這是 EF 的一個優點,以防萬一我想做更複雜的事情。

EF 是否使用了比 LinqToSql 更多的資源,以至於如果我只需要類似 LinqToSql 的功能,我就不應該使用它?

更新:我做了一些測試,我的測試似乎表明 Linq to Entities 的性能優於 Linq to SQL。

我首先從單個表中刪除 1000 條記錄,添加 1000 條記錄,編輯 1000 條記錄,然後將它們數據綁定到 DataView。LinqToSQL:5 秒 LinqToEntities:2 秒

我使用兩個連接表執行了相同的測試,結果相似。

我的測試似乎支持另一個文章: Linq To Sql vs Entity Framework Performance

更新 2:

感謝您的回复。在我看來,與 Linq to SQL 相比,Linq to Entities 並沒有真正矯枉過正。在研究了更多之後,我認為使用 Linq to Entity 是要走的路。它似乎有更好的性能。

我相信我聽到的“矯枉過正”的說法是因為 Linq to Entities 可以比 Linq To SQL 做更多的事情,而且它確實需要更多的配置(web.config 中大約多 1 行)。此外,Linq to Entities 所做的一些小事情與 Linq to SQL 不同,這可能會讓某些人覺得 Linq to Entities 更複雜。但是一旦你學會瞭如何做事,Linq to Entities 似乎並不比 Linq to SQL 複雜。

如果我錯了,請糾正我,但實體框架應該只在您需要轉換後端對象時發揮作用,例如當您組合來自不同數據源的表、拆分錶等時。它添加了實體層所以你可以隱藏所有的管道,只處理你清理過的實體。如果您只是像在 LINQ to SQL 中那樣對您的表使用 1 對 1,那麼我確信您不使用的那層複雜性會減慢它的速度。聽起來 LINQ to SQL 是適合您的工作的正確工具,直到您有更複雜的數據源需求。

Linq to SQL 和實體框架在概念上是不同的野獸,您應該根據它們如何滿足您的需求而不是微基準來做出選擇。即使Entity Framework速度較慢,但它是微軟ADO.NET團隊的重點,並將多次改進。Linq-to-SQL 被有效地凍結。

從概念上講,它們的不同之處在於 Linq-to-SQL 只是一種使用 Linq 執行數據庫查詢的方式。聽起來很明顯,但重點是:您正在訪問根據其數據庫模型結構化的數據。儘管 FK 被適當地轉換,但您仍然有多餘的對象,其中數據被規範化到不同的表中。您編寫的每個查詢都必須處理這種事情。

Entity Framework 允許您以聲明方式構造一個層,該層以應在記憶體中表示的方式表示您的數據,將來自多個表的數據帶到適當的單個對像中;將多對多關係表示為集合屬性等。然後您編寫的查詢將針對此模型,並且目的更清晰,更明顯(不再有 15 個表連接!)。

如果您不確定是否使用 Entity Framework,O’Reilly 將在 2009 年 1 月 15 日出版 Entity Framework 的綜合性書籍(預覽版現已在 Roughcuts 上提供) - 它的 MSDN 文件目前非常糟糕,這使得提出它變得更加困難. 我確實相信它值得長期使用,除了最微不足道的項目(就我個人而言,如果我寫一些微不足道的東西,我會直接使用 ADO.NET2 並忘記 Linq)。

引用自:https://stackoverflow.com/questions/267357